在 Windows 7 中使用相对路径的 Java 文件类

标签 java file maven-2 relative-path

我在 Maven2 单元测试中遇到一些令人困惑的行为。以下测试代码在 Eclipse 与 Maven2 中运行会产生不同的结果:

File f = new File( JUnitConstants.TEST_FILE );
File root = new File( "." );
Log.info( "File Info:" );
Log.info( f.toString() + (f.exists() ? " exists" : " doesn't exist") );
Log.info( f.getAbsoluteFile().toString() + (f.getAbsoluteFile().exists() ? " exists" : " doesn't exist") );
Log.info( root.toString() + (root.exists() ? " exists" : " doesn't exist") );
Log.info( root.getAbsoluteFile().toString() + (root.getAbsoluteFile().exists() ? " exists" : " doesn't exist") );

在 Eclipse 中,一切都存在并且单元测试运行良好。在maven中,f.exists()方法返回false;所以它认为该文件不存在!以下是 Maven 运行测试的输出:

2013-01-10 09:50:51,737 [main] INFO  - File Info:
2013-01-10 09:50:51,737 [main] INFO  - target\test-classes\test\test.img doesn't exist
2013-01-10 09:50:51,737 [main] INFO  - C:\Users\me\code\HEAD\modules\project\target\test-classes\test\test.img exists
2013-01-10 09:50:51,737 [main] INFO  - . exists
2013-01-10 09:50:51,737 [main] INFO  - C:\Users\me\code\HEAD\modules\project\. exists

那么,文件存在,根目录就是我所期望的,但是为什么Java在使用相对路径时认为该文件不存在?

我使用的是 Windows 7,64 位;使用 JDK 1.6_38 32 位。

最佳答案

我从未在测试中实际使用过 new File(filepath) 构造函数。我总是用...

String filepath = "test/test.img"; // relative to src/test/resources
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(filepath);

或者,如果资源文件与使用它们的测试位于相同的包结构中,您可以使用更简单的...

String filename = "test.img"; // relative to src/test/resources/package/where/tests/live
InputStream inputStream = getClass().getResourceAsStream(filepath);

这似乎在 Maven 和我的 coice IDE 中总是有效,IntelliJ IDEA .

有关上述代码的详细解释,请参阅 this blog post .

关于在 Windows 7 中使用相对路径的 Java 文件类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14261997/

相关文章:

java - 正则表达式中的通配符仅在停用词之前是贪婪的

java - 无法创建未找到的唯一键约束

java - 如何使用 PC NAME 在 Lubuntu 中永久挂载 Windows 共享文件夹?

maven-2 - 使用 Maven 2 管理依赖关系

java - Hudson + Poll SCM - 首先构建上游项目?

java - 多次返回 : Which one sets the final return value?

c - 在不同目录中打开文件

JavaScript 本地文件访问和打开文件

java - 如何读取 Java 中的属性文件?

java - 使用 Maven 部署项目