IntelliJ IDEA new File(...) 使用 Workspace 目录作为根而不是 git 存储库目录
IntelliJ IDEA new File(...) uses Workspace directory as root instead of git repository directory
我刚从 Eclipse Luna 迁移到 IntelliJ IDEA 14.0.3,我在为资源创建新的 File(...) 对象时遇到问题。
这是我的设置:
\dev\git\myproject\src\main\resources\myfile.txt is the resource I want to read
\dev\idea\workspace\myproject contains my IDEA project
这意味着我在一个目录中创建了一个 IDEA 项目,并导入了我的 git 存储库目录中的 (maven) 项目。
现在,当我使用以下语句创建一个新的 File 对象时
inputFile = new File("src/main/resources/myfile.txt");
这将产生以下路径:
\dev\idea\workspace\myproject\src\main\resources\myfile.txt
但是,我想从
中检索资源
\dev\git\myproject\src\main\resources\myfile.txt
以前Eclipse设置目录是正确的,但是用IDEA怎么实现呢?
问题不在于 IntelliJ,而在于您尝试访问文件的方式。
根据你的问题,我可以看出你使用了 maven 并且你在 src/main/resources 中有一个你想要访问的文件。
根据 Maven,当你在 src/main/resources 中有一个文件时,这也意味着该文件也将在类路径中可用(请参阅 Maven 文件夹结构以了解更多信息)。
但是您正在尝试使用相对路径(包括 maven 文件夹结构)访问该文件,并且此代码在您打包项目时将不起作用。由于 Maven 将排除 jar/war/ejb 或任何其他包中的文件夹 (src//) 并且仅包含资源。
您应该尝试从类路径访问该文件,这是正确的做法,而且最重要的是,即使在打包您的项目后它也能正常工作。
尝试用
替换您的代码
inputFile = new File(this.getClass().getClassLoader().getResource("myfile.txt").getFile());
或
inputFile = new File(Thread.currentThread().getContextClassLoader().getResource("myfile.txt").getFile());
根据项目类型(独立项目或网络应用)使用上述代码段。
我刚从 Eclipse Luna 迁移到 IntelliJ IDEA 14.0.3,我在为资源创建新的 File(...) 对象时遇到问题。 这是我的设置:
\dev\git\myproject\src\main\resources\myfile.txt is the resource I want to read
\dev\idea\workspace\myproject contains my IDEA project
这意味着我在一个目录中创建了一个 IDEA 项目,并导入了我的 git 存储库目录中的 (maven) 项目。 现在,当我使用以下语句创建一个新的 File 对象时
inputFile = new File("src/main/resources/myfile.txt");
这将产生以下路径:
\dev\idea\workspace\myproject\src\main\resources\myfile.txt
但是,我想从
中检索资源\dev\git\myproject\src\main\resources\myfile.txt
以前Eclipse设置目录是正确的,但是用IDEA怎么实现呢?
问题不在于 IntelliJ,而在于您尝试访问文件的方式。
根据你的问题,我可以看出你使用了 maven 并且你在 src/main/resources 中有一个你想要访问的文件。
根据 Maven,当你在 src/main/resources 中有一个文件时,这也意味着该文件也将在类路径中可用(请参阅 Maven 文件夹结构以了解更多信息)。
但是您正在尝试使用相对路径(包括 maven 文件夹结构)访问该文件,并且此代码在您打包项目时将不起作用。由于 Maven 将排除 jar/war/ejb 或任何其他包中的文件夹 (src//) 并且仅包含资源。
您应该尝试从类路径访问该文件,这是正确的做法,而且最重要的是,即使在打包您的项目后它也能正常工作。
尝试用
替换您的代码inputFile = new File(this.getClass().getClassLoader().getResource("myfile.txt").getFile());
或
inputFile = new File(Thread.currentThread().getContextClassLoader().getResource("myfile.txt").getFile());
根据项目类型(独立项目或网络应用)使用上述代码段。