【发布时间】:2019-12-28 14:14:06
【问题描述】:
对于一个项目,我需要读取一个包含 pokemon 数据的 csv 文件,我尝试创建一种方法,允许我在 csv 文件中查找数据,如下所示:
private final String fileName = "./data/pokedex.csv";
String line = "";
private final String separator = ",";
private List<String> getPokeInfoById(int id) {
int i = 0;
List<String> info = null;
BufferedReader br;
try {
br = new BufferedReader(new FileReader(fileName));
while ((line = br.readLine()) != null) {
if (i == id) {
try (Stream<String> stream = Arrays.stream(line.split(","))) {
info = stream.collect(Collectors.toList());
}
} else {
i++;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return info;
}
但是java说:
java.io.FileNotFoundException: data\pokedex.csv (The system cannot find the file specified)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(FileInputStream.java:213)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:155)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:110)
[...]
这是我的 src 的样子:
C:.
├───controleur
├───data
│ grid_types.csv
│ moves.csv
│ pokedex.csv
│
├───img
├───model
│ │ Pokemon.java
│ │ Type.java
│ │
│ └───analyzer
│ Pokedex.java
│
└───test
PokedexTest.java
【问题讨论】:
-
fileName 的值是多少?并检查该文件是否存在于该路径中。
-
通过将路径传递给实际存在的文件。请注意,您的路径是相对路径,因此会针对 current 目录进行解析,该目录是执行 java 命令的目录。就像你输入
notepad data\pokedex.csv一样,它会在当前目录包含的数据目录中查找文件pokedex.csv。 -
我添加了我的文件夹树,我的方法在 pokedex.java 中,我尝试在 PokedexTest.java 中使用它对我来说一切正常
-
你完全没有抓住重点。再次阅读我的评论。您的课程名称完全无关紧要。重要的是 current 目录。如果您从
c:\执行java MyProgram,它将查找文件c:\data\pokedex.csv。如果您从c:\foo\bar\baz执行java MyProgram,它将查找文件c:\foo\bar\baz\data\pokedex.csv -
我用
System.out.println(new File("."). getAbsolutePath());看看我在哪里,我能看到它,谢谢
标签: java csv bufferedreader