我有一个像这样的方法readFromFile:
private static ArrayList<ArrayList<Integer>> readFromFile(String name) {
ArrayList<ArrayList<Integer>> inputs = new ArrayList<ArrayList<Integer>>();
try {
InputStream in = ReadWriteFile.class.getClass().getResourceAsStream(name);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
ArrayList<Integer> input = new ArrayList<Integer>();
for (int i=0; i<line.length(); i++) {
int value = 0;
try {
value = Integer.parseInt(String.valueOf(line.charAt(i)));
} catch (Exception e) {
input.add(value);
}
inputs.add(input);
}
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return inputs;
}
我在这里用这个方法来读取txt文件的文件夹。我需要它将文件的名称放在arraylist中(文件是字母表):
public static ArrayList<TrainingSet> readTrainingSets() {
ArrayList<TrainingSet> trainingSets = new ArrayList<TrainingSet>();
for (int i=0; i<26; i++) {
char letterValue = (char) (i+26);
String letter = String.valueOf(letterValue);
for (ArrayList<Integer> list : readFromFile("C:\\Users\\hp\\Desktop\\resources\\" + letter + ".txt")) {
trainingSets.add(new TrainingSet(list, GoodOutputs.getInstance().getGoodOutput(letter)));
}
}
return trainingSets;
}
源文件夹包含以下文件:A.txt,B.txt等。当我尝试运行代码时出现错误。
Exception in thread "main" java.lang.NullPointerException
at java.io.Reader.<init>(Unknown Source)
at java.io.InputStreamReader.<init>(Unknown Source)
at data.ReadWriteFile.readFromFile(ReadWriteFile.java:34)
at data.ReadWriteFile.readTrainingSets(ReadWriteFile.java:22)
at network.Train.<init>(Train.java:16)
at gui.MainGui.<init>(MainGui.java:38)
at gui.MainGui.main(MainGui.java:32)
我猜这个方法找不到我电脑上的文件。但我不知道为什么。表格错了吗?你能救我吗?
答案 0 :(得分:2)
您正在将绝对文件路径传递给Class.getResourceAsStream(...)
,这是错误的。
选项1:使用Class.getResourceAsStream(...)
但使用相对于类路径上的文件夹(或jar)的路径。例如,如果C:\\Users\\hp\\Desktop\\resources
是类路径上的文件夹,则可以执行
ReadWriteFile.class.getResourceAsStream("/" + letter + ".txt");
选项2:使用FileInputStream从完整文件路径中读取
new FileInputStream("C:\\Users\\hp\\Desktop\\resources\\" + letter + ".txt")
答案 1 :(得分:0)
Class.getResourceAsStream
用于类路径上的(只读) resources ,可能压缩在jar中。
替换
try {
InputStream in = ReadWriteFile.class.getClass().getResourceAsStream(name);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
...
reader close();
}
通过
try (BufferedReader = Files.newBufferedReader(Paths.get(name), Charset.getDefaultCharset())) {
...
}
类Files提供了很好的方法,比如获取所有行。