【问题标题】:Creating file via relative path not working with IDE通过相对路径创建文件不适用于 IDE
【发布时间】:2017-07-28 23:23:18
【问题描述】:

我现在正试图掌握流和套接字,所以我想做的早期测试只是从普通 txt 文件中读取行。

我先是通过IntelliJ IDE设置的,代码如下,

package NixWichtiges;

import java.io.*;

/**
 * Created by Wolfone on 08.03.2017.
 */
public class StreamReadTest {
    public static void main(String[] args) {
        BufferedReader bufferedReader = null;
        try {
            bufferedReader = new BufferedReader(new FileReader(new File("test.txt")));
            String message;
            while ((message = bufferedReader.readLine()) != null){
                System.out.println(message);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

test.txt 位于 StreamReadTest.java 所在的同一文件夹中,我检查它是否包含在通过执行 run 创建的编译输出的相应路径中IntelliJ。但我不断收到FileNotFoundException

当我通过命令行编译和执行在我的另一台计算机上尝试它时,它工作得很好(使用此测试的默认包),这让我更加困惑。

有人能解释一下出了什么问题吗?

提前感谢您对此的任何意见。

最好的祝愿 狼王

【问题讨论】:

  • 除非您使用特定路径,否则上下文中的文件必须位于调用 JVM 的路径中。
  • idea 从项目根目录运行项目,所以在您的情况下,您应该将new File("test.txt") 更改为new File("src/main/java/NixWichtiges/test.txt") 或将文件放到项目根目录
  • 啊,好吧,我以为它会像 Reddy 这样的东西,但我没有想到这个想法可能会从与我使用的包含 main 的类不同的位置运行整个东西,所以感谢斯拉瓦对此的回答。解决了我的问题:)

标签: java file intellij-idea inputstream


【解决方案1】:

这与 IntelliJ 无关——无论你如何运行这个应用程序,你都会遇到同样的问题。您引用了一个没有路径的文件,这意味着它将在您启动运行代码的 jvm 的目录中找到。尝试使用绝对路径,这应该可以解决它。或者,了解类路径资源,这是定位文件的首选方式。而且,即使是像这样的琐碎程序也应该使用 maven 构建(这真的很容易)。

最后,你不应该在你的源目录(src/main/java)中有这个文件。它应该在资源目录(src/main/resources)中。

要确认您在哪个目录中运行,您可以创建一个文件并查看其绝对路径,例如:

System.out.println(new File("").getAbsolutePath());

【讨论】:

  • 感谢您的意见!我对Maven了解不多,对Ant了解一点;据我了解,两者都是构建工具。很抱歉提出后续问题,但现在您提到了:在选择使用哪个时我必须考虑哪些主要差异?
  • 别无选择。使用行家。还有第三种选择:Gradle,但同样别无选择:使用 maven。 Maven 非常容易上手,但您必须忍受一点 xml 才能开始 (maven.apache.org/guides/introduction/…)。将该链接中的 xml 放入项目根目录中名为 pom.xml 的文件中,然后关闭项目并删除 .idea 文件夹,然后“打开”pom——idea 将从那里接管。
  • 好吧,老实说似乎很严谨,但了解更多不同的东西在大多数情况下不会有任何伤害,所以感谢您的链接:)
猜你喜欢
  • 2012-08-29
  • 2011-07-12
  • 2013-01-11
  • 1970-01-01
  • 2018-09-03
  • 2014-01-02
  • 2015-05-14
  • 2017-06-01
  • 1970-01-01
相关资源
最近更新 更多