我正在尝试读取一个包含3列和未指定行数的csv文件。然后我尝试将每列读取并将其读入自己的arrayList。第一列是名称,第二列是分数,第三列是难度。任何帮助将非常感激。 目前的代码:
public static void main(String[]args) throws IOException{
ReadFile f = new ReadFile();
}
public CSVReader reader;
ReadFile(){
ArrayList myEntries = new ArrayList<>();
ArrayList<String> nameList = new ArrayList<>();
ArrayList<String> scoreList = new ArrayList<>();
ArrayList<String> difficultyList = new ArrayList<>();
try {
reader = new CSVReader(new FileReader("H:\\S6\\AH Computing\\Java Practice\\leaderboard.csv"));
} catch (FileNotFoundException ex) {
Logger.getLogger(ReadFile.class.getName()).log(Level.SEVERE, null, ex);
}
try {
myEntries.add(reader.readAll());
} catch (IOException ex) {
Logger.getLogger(ReadFile.class.getName()).log(Level.SEVERE, null, ex);
}
for(int i = 1; i< myEntries.size();i++){
try {
myEntries.add(reader.readNext());
} catch (IOException ex) {
Logger.getLogger(ReadFile.class.getName()).log(Level.SEVERE, null, ex);
}
}
for(int i = 1; i< myEntries.size();i++){
nameList.add((String) myEntries.get(i));
i++;
scoreList.add((String) myEntries.get(i));
i++;
difficultyList.add((String) myEntries.get(i));
}
}
答案 0 :(得分:1)
您的代码存在一些问题。首先关闭CSVReader readAll方法读取整个文件并返回一个List,以便在代码中更改myEntries.add(reader.readAll());到myEntries.addAll(reader.readAll());
那说现在已经将整个文件读入内存,不需要执行readNext。所以删除整个try / catch。
现在你拥有的是一个列表,所以改变
for(int i = 1; i< myEntries.size();i++){
nameList.add((String) myEntries.get(i));
i++;
scoreList.add((String) myEntries.get(i));
i++;
difficultyList.add((String) myEntries.get(i));
}
到
for(int i = 1; i< myEntries.size();i++){
String[] entries = myEntries.get(i);
nameList.add(entries[0]);
scoreList.add(entries[1]);
difficultyList.add(entries[2]);
}
可能需要进行一些类型转换。
您可以在http://opencsv.sourceforge.net/apidocs/index.html查看opencsv javadocs以获取更多信息。