我似乎无法使用Java来检测我的文本文件。它一直给我一个FileNotFoundException()
,我以前可以找到它来查找PNG和TTF文件,但是我不确定是否需要做一些特殊的事情来使其在资源文件夹中找到文本文件。
我正在将Eclipse 2018-19(4.9.0)与OpenJDK 11一起使用。
如何使我的程序设法查找和利用此文本文件?
MCV示例:
public static main(String[] args) {
generateHumanName();
}
/**
* Generates a male "human-ish" name from a text file of syllables.
* @return String The male human name.
*/
private static String generateHumanName() {
try {
FileReader("/text/male_human_name_syllables.txt/");
} catch (IOException e) {
e.printStackTrace();
}
return null; // never called
}
收到异常:
java.io.FileNotFoundException: ../res/text/male_human_name_syllables.txt (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at java.io.FileReader.<init>(FileReader.java:58)
at mcve.MCVE.generateHumanName(MCVE.java:21)
at mcve.MCVE.main(MCVE.java:12)
我的文件路径:
答案 0 :(得分:3)
您正在将该文件放在资源文件夹(res
)中:这与在本地文件系统上浏览文件不同(请参见下文):
您需要使用MCV.class.getResourceAsStream("/text/male_human_name_syllables.txt")
:
try (InputStream is = MCVE.class.getResourceAsStream("/text/male_human_name_syllables.txt")) {
if (null == is) {
throw new FileNotFoundException("/text/male_human_name_syllables.txt");
}
try (BufferedReader in = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {
// do stuff here
}
}
我不会对getResourceAsStream
,the javadoc will do better explanation进行过多研究,但是:
null
。您可能需要将测试移出资源进行尝试。bin
)。/text
之前不加正斜杠,则该斜杠将相对于调用getResourceAsStream
方法的类(和包)。或者,如果要在某个随机位置读取文件,则应将其传递给程序并读取它(例如:配置Eclipse以使用一些args执行程序)并读取它:
public static main(String[] args) {
if (args.length < 1) throw new IllegalArgumentException("missing path");
generateHumanName(args[0]);
}
/**
* Generates a male "human-ish" name from a text file of syllables.
* @return String The male human name.
*/
private static String generateHumanName(String path) {
try (FileReader reader = new FileReader(path)) {
} catch (IOException e) {
e.printStackTrace();
}
return null; // never called
}
否则,必须将text
文件夹移至项目的根目录(res
文件夹所在的位置),刷新项目并使用text/male_human_name_syllables.txt
(因为这是绝对的路径)。
res/text/male_human_name_syllables.txt
可能会起作用(因为它是从项目的根目录执行的)。