如何使用 openCSV 读入单独的数组列表?
How to read into separate arrayLists using openCSV?
我正在尝试读取一个包含 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));
}
}
你的代码有几个问题。首先,CSVReader readAll 方法读取整个文件和 returns 一个列表,因此在您的代码中更改 myEntries.add(reader.readAll());至 myEntries.add全部(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 javadoc 以获取更多信息。
我正在尝试读取一个包含 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));
}
}
你的代码有几个问题。首先,CSVReader readAll 方法读取整个文件和 returns 一个列表,因此在您的代码中更改 myEntries.add(reader.readAll());至 myEntries.add全部(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 javadoc 以获取更多信息。