当前位置: 首页 > 知识库问答 >
问题:

如何在Java Eclipse中读取excel CSV文件(逗号分隔值)?

商骞仕
2023-03-14

目标:创建一个面向对象的图形Java应用程序,该程序将:读取一个CSV(逗号分隔值)文件,该文件由学生姓名(名字、姓氏)、ID以及内容和交付的初始标记组成(未评估学生使用-1值)。

这是我的代码,但当我点击选择文件。。当它真的应该打开文件并读取数据时,它会显示“预期的名字、姓氏、ID、内容和交付”。但不知何故,它不起作用。在此处输入图像描述

下面是我的代码:

私有类ChooseFileListener实现ActionListener{

public void actionPerformed(ActionEvent event) {
  Section<Student> section;

  JFileChooser fileChooser = new JFileChooser();
  FileNameExtensionFilter filter = new FileNameExtensionFilter(
                                                               "CSV file", "csv");
  fileChooser.setFileFilter(filter);
  int returnValue = fileChooser.showOpenDialog(null);
  if (returnValue == JFileChooser.APPROVE_OPTION) {
    File selectedFile = fileChooser.getSelectedFile();
    if (selectedFile != null) {
      section = createNewSection(selectedFile);
      loadStudents(section, selectedFile);
      System.out.print(selectedFile);
}
}
}
}

public void RandomStudent(){
ArrayList<Student> students = new ArrayList<>();
max = (students.size()-1);
int x = (int) Math.random()* students.size();
System.out.println(x);
}


private Section<Student> createNewSection(File selectedFile) {
String filename = selectedFile.getName();
Section<Student> section = new Section<Student>(filename);
return section;
}


private void loadStudents(Section<Student> section, File selectedFile) {
Scanner in;
int MAX_COMMAS = 5;
try {
  in = new Scanner(selectedFile);
  String line = "";
  String[] studentData;
  in.nextLine();
  while (in.hasNext()) {
    line = in.nextLine();
    studentData = line.split(",");
    if (studentData.length == MAX_COMMAS) {
      section.addStudent(new Student(studentData[0],studentData[1],
                                     Integer.valueOf(studentData[2]), 
                                     Integer.valueOf(studentData[3]),
                                     Integer.valueOf(studentData[4])));
    } else {
      throw new Exception(
                          "Invalid file format. \nExcepted: firstname, lastname, id, content, delivery");
    }
  }
} catch (Exception e) {
  JOptionPane.showMessageDialog(null, e.getMessage());
}
}
}

我现在创建了另一个名为Section的类:

打包帕特尔。杰南;

导入java。util。ArrayList;

公共课组{

 private String data;
 private String FirstName;
 private String LastName;
 private int studentID;
 private int ContentMark;
 private int DeliveryMark;

 private ArrayList<Student> students = new ArrayList<>();

 public void FileData(String First, String Last, int ID, int Content, int Delivery){
      this.FirstName = First;
      this.LastName = Last;
      this.studentID = ID;
      this.ContentMark = Content;
      this.DeliveryMark = Delivery;
     }

public String setFirst(String First){
      return First;
}

 public String setLast (String Last){
     return Last;
 }
 public int setstudentID (int ID) {
     return ID;
 }
 public int setContentMark (int Content) {
     return Content;
 }
 public int setDeliveryMark (int Delivery) {
     return Delivery;
 }   

 public Section(String data) {
  this.data = data;
 }

 public void addStudent(Student student) {
  students.add(student);
 }

}

共有1个答案

宰父学
2023-03-14

问题是您检查了MAX_COMMAS,但您正在根据字段的数量检查它。对于格式正确的文件,此值始终为5。因此,您确保到达代码的其他部分并始终抛出。

你想要表达的是:

if (studentData.length != MAX_COMMAS)
 类似资料:
  • 问题内容: 当我的输入为1 2 3(以空格分隔)时,该程序运行良好。但是,当我的输入为1,2,3(以逗号分隔)时,如何修改程序。 问题答案: 您可以使用nextLine方法读取字符串,并使用拆分方法将其以逗号分隔,如下所示: 此方法适用于仅用逗号分隔的3个值。 如果需要更改值的数量,可以使用循环从向量中获取值。

  • 我有一个txt文件,数据如下所示 我在使用这段代码时读到了数据: 由于我的时间列,它不能正常工作,因为是通过逗号分隔的。我该如何解决这一点,如何使它工作,即使在我有多列这样的时间格式的情况下? 我想获得一个如下所示的数据帧: 多谢!

  • 问题内容: 我有一个逗号分隔的CSV文件,其中包含NASDAQ符号。我使用扫描仪读取文件 我在第二个字段上遇到异常。问题是,该字段与文件中的其他某些字段一样也包含逗号,例如“ 1-800 FLOWERS.COM,Inc.”: 如何避免这个问题?我的代码是: 谢谢 问题答案: 除非这是家庭作业,否则您不应该自己解析CSV。使用现有库之一。例如: http //commons.apache.org/s

  • 问题内容: 我有一个包含逗号分隔值的MySQL表,如下所示: 我要选择其集合中的行。我怎样才能做到这一点? 问题答案: 怎么样

  • 我想把一个多项选择题列表读成一个多维数组在Java,文件的格式是:问题,answer1,answer2,answer3,answer4,CorretAnswer。 一公里有几米?,1,10,100,1000,4,彩虹童谣里哪种颜色不是?,蓝色,粉色,黑色,橙色,3一个足球队在场上有几个队员?,10,11,12,13,2 所以我希望数组的格式为question[][],如果n是1,那么questio

  • 如果内容相同,我想将两个文件合并为一个: first.txt second.txt 后果txt 首先,我想读取文件的内容并将其保存到数组中。但是怎么做呢? 输出: 1,2,3 例如,如何将逗号分隔开来,以便我可以编写?