我正在使用Intelli-J Idea IDE并致力于Java EE Web项目。我正在尝试阅读words.txt
文件。代码在命令行中工作正常,但是当我将代码部署到glassfish服务器时,它给了我" FileNotFoundException"。
文件位于" src / Analyzer / pWords.txt"
读取文件内容的代码:
Scanner scan = new Scanner(new File("src/Analyser/pWords.txt"));
在搜索StackOverflow之后,我发现我需要将此文件添加到资源目录中。不幸的是,我无法创建资源。当我创建包main
和src
文件夹中的资源时,包变为main.resources
,我尝试了另一种方式,例如:
InputStream inputStream = new FileInputStream("src/Analyser/pWords.txt");
和
InputStream inputStream = MyClass.class.getClassLoader().getResourceAsStream("src/Analyser/pWords.txt");
InputStream inputStream = MyClass.class.getClassLoader().getResourceAsStream("pWords.txt");
但结果是null
或error
。
那么有什么方法可以从我项目的src/Analyser/
目录中读取文件吗?它是一个Java EE Web项目。
更新
从项目结构>人工制品> WEB-INF
文件夹,我上传了pWords.txt
文件。最后,BufferedReader不为空,而调试我可以看到bufferedReader
包含数据。但是当我将数据复制到字符串变量时,变量保持为空。我很困惑。
代码:
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream stream = classLoader.getResourceAsStream("pWords.txt");
BufferedReader bf = new BufferedReader(new InputStreamReader(stream));
String t = "";
try {
while((t = bf.readLine()) != null) { // in debugging, (cb) contains the char data as char elements.
t += bf.readLine(); // but t = null
}
} catch(IOException x) {
}
答案 0 :(得分:1)
Nix试试这个
InputStream in = this.getClass().getClassLoader()
.getResourceAsStream("Analyser/pWords.txt”);
答案 1 :(得分:1)
您的代码中确实存在两个问题/错误!
1。)您正在以两种方式使用变量t。一方面,您将结果组合为t += bf.readLine();
,另一方面,您将通过(t = bf.readLine()) != null
从流中进一步输入来覆盖t。由于这是while循环的中止条件,因此t最终总是为空!
2。)你正在调用bf.readLine()
两次 - 在while条件下,再次在循环内。如果您阅读了readLine()
的API / javadoc,那么您将会知道这两个调用将返回2个不同的(!)结果。这样,如果流(bf
)只包含一行文本,那么在您的情况下,bf.readLine()
的调用将返回您的文本行,并在您尝试将其添加到变量{{ 1}}然后t
的(第二次)调用将返回null,因为已到达流的末尾。
可能的解决方案:
bf.readLine()