java - 读取 Java EE Web 项目中的文件

标签 java jakarta-ee intellij-idea

我正在使用 Intelli-J Idea IDE 并致力于 Java EE Web 项目。我正在尝试阅读words.txt文件。该代码在命令行中运行良好,但是当我将代码部署到 glassfish 服务器中时,它给了我“FileNotFoundException”。

文件位于“src/Analyser/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");

但结果是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) {

    } 

最佳答案

您的代码中确实有两个问题/错误!

1.) 您以两种方式使用变量 t。一方面,您将结果组合为 t += bf.readLine();另一方面,您将使用来自流的进一步输入覆盖 t (t = bf.readLine()) != null 。由于这是 while 循环的中止条件,因此 t 最终始终为 null!

2.) 您正在调用bf.readLine()两次 - 在 while 条件中,并在循环内再次。如果您阅读 readLine() 的 API/javadoc然后你就会知道这两个调用将返回 2 个不同的(!)结果。这样,如果流 ( bf ) 仅包含一行文本,那么在您的情况下,将调用 bf.readLine()将返回您的文本行,当您尝试将其添加到变量 t 时那么你的(第二次)调用bf.readLine()将返回 null,因为已到达流末尾。

可能的解决方案:

String singleLine;
String wholeText = "";
try {
    while((singleLine = bf.readLine()) != null) {
        wholeText += singleLine;
    }
} catch(IOException x) {
} 

关于java - 读取 Java EE Web 项目中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47930812/

相关文章:

java - Tomcat 与 Weblogic JNDI 查找

java - 在Java中复制一些文本后如何获取系统剪贴板图像?

Java int 数据类型在使用二进制值时自动转换

java - Idea 不断将 Kotlin 的编译目标从 1.8 切换到 1.6

android - Intellij idea usb 设备调试应用程序无法在手机上加载

java - Android Java 从 res/raw 读取文本文件,文件未找到错误

java - Vaadin:一个合适的设计模式

java - 列出打包 war 中的文件

java - 如何在 Payara 上的 REST 请求之前进行身份验证/登录?

java - 如何在 Android Studio IDE 中找到我项目中所有未使用的方法?