读取Java EE Web项目中的文件

时间:2017-12-21 18:34:59

标签: java java-ee intellij-idea

我正在使用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之后,我发现我需要将此文件添加到资源目录中。不幸的是,我无法创建资源。当我创建包mainsrc文件夹中的资源时,包变为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");

但结果是nullerror

那么有什么方法可以从我项目的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) {

    } 

2 个答案:

答案 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()