我正在尝试从这个看起来像
的CSV文件中读取"1.23","2.45","3.25"
"4","5","6"
"7","8","9"
"10","11","12"
现在的问题是,虽然Java可以找到我的文件,但行拆分并没有返回我期望的内容。
这是我尝试从csv文件中读取的内容。
File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());
File resource = new File(root, "coords.csv");
float[] x = new float[5000];
float[] y = new float[5000];
float[] z = new float[5000];
int coordIndex = 0;
BufferedReader br = null;
String line = "";
String cvsSplitBy = ",";
/* 1, 2, 3,
* 3, 5, 6,
*/
try{
System.out.println(coordIndex);
br = new BufferedReader(new FileReader(resource));
String[] coordinates = line.split(cvsSplitBy);
/*I get an error from accessing an array out of bounds */
System.out.println(coordinates[0]);
System.out.println(coordinates[1]);
System.out.println(coordinates[2]);
x[coordIndex] = Float.parseFloat(coordinates[0]);
y[coordIndex] = Float.parseFloat(coordinates[1]);
z[coordIndex] = Float.parseFloat(coordinates[2]);
coordIndex++;
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这是我的输出错误:
IOException: java.lang.ArrayIndexOutOfBoundsException: 1
任何想法??
答案 0 :(得分:1)
String line = "";
br = new BufferedReader(new FileReader(resource));
String[] coordinates = line.split(cvsSplitBy);
您的line
中没有数据。
你必须添加一个循环来阅读所有内容:
while(line = br.readLine() != null) { }
答案 1 :(得分:0)
你分裂的line
是空行。这导致split
返回一个空数组。
你得到的错误是非防御性编程的典型错误:split()的结果完全取决于用户输入(你事先不知道),因此检查必须结果:
coords = line.split(",");
if (coords.length == 3) {
// looks good
}
else {
System.err.println("Bad data: " + line);
}
答案 2 :(得分:0)
line
为空。您永远不会分配""
...