IntelliJ和Java读取文件的默认路径

时间:2018-12-05 10:37:37

标签: java maven intellij-idea

我有点困惑如何在IntelliJ和Java中设置默认文件搜索路径。我将IntelliJ作为标记包括在内,因为此IDE可以肯定地修改/添加一些其他搜索路径。

考虑以下伪代码:

    File ff = new File("test.txt");
    if(ff.exists() && !ff.isDirectory()) {
        System.out.println("Exist");
        LabelReader lr = new LabelReader(ff);
    } else {
        System.out.println("Missing");
    }

在IntelliJ中,只有将test.txt放置在项目的最高目录中(例如,与srcpom.xml等一起放置),这才有效

第一个问题
哪个设置负责添加/修改此虚拟起始路径?

现在ClassLoadergetResource

    ClassLoader cl = DayTwoMain.class.getClassLoader();
    URL pathURL = cl.getResource("test.txt");
    File ff = new File(pathURL.getPath());
    if(ff.exists() && !ff.isDirectory()) {
        System.out.println("Exist");
        LabelReader lr = new LabelReader(ff);
    } else {
        System.out.println("Missing");
    }

由于将NullPointerException设置为URL,但会在伪调用之后产生null

    ClassLoader cl = DayTwoMain.class.getClassLoader();
    URL pathURL = cl.getResource("");

给出指向[ProjectRoot]/target/classes的URL

第二个问题
为什么将ClassLoader路径设置为构建后目录?编译源代码后,是否与从该目录开始的实际JVM有关?如何以及在何处可以更改/修改?

现在有了资源。我认为,IntelliJ / Maven项目文件,图像,配置和其他静态评估应存储在资源文件夹中。因此,在IntelliJ中标记为资源根目录的文件夹应原样复制到目标位置,但对我而言并非如此,目标仅包含classs文件夹,没有资源被复制。我必须手动将带有资源的部分添加到pom.xml中,如下所示:

    <resources>
        <resource>
            <directory>src/main/resources/*</directory>
        </resource>
    </resources>

强制IntelliJ将其复制到目标。

第三个问题
这不是IntelliJ自动完成的任务吗?整个大型的IDE都可以通过点选和点击的乐趣来自动完成那些任务?还是我做错了什么?

1 个答案:

答案 0 :(得分:0)

new File("test.txt")将尝试从当前工作目录中的任何一个读取文件。在IntelliJ中,每个运行配置都允许根据documentation: Creating and Editing Run/Debug Configurations

指定“工作目录”选项

这可以是特定于平台的,例如如果您有一个自定义运行配置,其中在Windows上通过javacmd /c java配置启动了cmd可执行文件,例如注册表项适用。

此外,如果您使用特定于插件的运行配置,例如Maven或Gradle他们可以应用自己的规则和设置。尤其在子模块的多模块项目中,路径可能与父模块不同。

这与您与ClassLoader和Maven资源过滤有关的问题完全不同。这些东西不是由IntelliJ管理的,IDE仅使使用“运行配置”运行变得很方便。