【问题标题】:How to access the local project file using java.nio.file.Path?如何使用 java.nio.file.Path 访问本地项目文件?
【发布时间】:2013-02-23 11:01:56
【问题描述】:

我是 java.nio 世界的新手。

我的 Java 模块中有一个日志文件 app.log。 (我正在使用 Intellij 11)。

在一个模块中,我有测试文件夹,我有一个本地文件 app.jar。

我想使用 Files.newInputStream(path) 方法将此文件读入 InputStream。

问题是在 Windows 中,我必须为输入路径提供完整的值,

Path path = Paths.get("C:\\Perforce\\depot\\Project\\module\\src\\test\\a\\b\\c\\app.jar");

我不确定是否有人获得此代码并且在他们的机器上具有类似的文件夹结构来访问 app.jar

我已将文件 app.jar 保存在编写测试的本地文件夹中。有没有办法可以概括这条路径?如果我的 Test 类位于 app.jar 所在的同一文件夹下,是否有任何机制可以避免提及完整的本地路径?

谢谢, 维杰·博尔

【问题讨论】:

  • 我的TestClass路径是:"C:\\Perforce\\depot\\Project\\module\\src\\test\\a\\b\\c\\TestClass.java"
  • Paths.get一个相对路径。
  • 你的意思是我的 TestClass.java 中的 Paths.get("app.jar") 吗?
  • @VijarBhore 这将取决于您的文件结构。我不知道 IntelliJ 是如何管理其文件结构的,但如果该文件结构用于 Eclipse 项目,那将是 Paths.get("src/test/a/b/c/app.jar")

标签: java path nio


【解决方案1】:

使用相对路径。 Paths.get() 将根据当前用户目录解析相对路径名。此目录由系统属性 user.dir 命名,通常是调用 Java 虚拟机的目录。

也就是说,如果 app.jar 直接在您的 app_home 文件夹下,而 app_home 是您运行 java.exe 的位置,那么 Paths.get("app.jar") 应该可以工作。

【讨论】:

  • 通常您在任何文件夹中定义 perforce repo,例如C:/perforce 在我的情况下。有人可能会在 C:/views 中执行此操作。我不想在我的本地位置签入 TestClass.java 文件以获取 app.jar 文件。如果我的文件位于 C:/perforce 中,其他开发人员可能无法检查 C:/views 中的 app.jar 文件。就像我们在 web 应用程序中使用本地资源或在普通应用程序中使用相对路径一样,我们也可以为 app.jar 文件这样做吗?
【解决方案2】:

@杰弗里

是的,它必须与intellij文件系统有关。

通常项目根目录是搜索文件的位置。 如果我的项目根目录是 C:\perforce\depot\TestProject\Main 那么 Paths.get("app.jar") 会尝试在 C 中查找文件:\perforce\depot\TestProject\Main\app.jar

实际上我有一个模块 com.x.y.z 在这个模块中我有 src 文件夹,我有测试根文件夹,我有 app.jar 文件。

因此,我必须实际调用

Paths.get("com.x.y.z/src/test/app.jar").

这解决了我的问题。

谢谢,

维杰·博尔

【讨论】:

  • 我建议从你的 bin 或 class 文件夹中获取它,而不是从 src 中获取
  • 由于这个模块是一个测试模块,我想,测试资源可以直接保存在 src/test 文件夹下。但是,是的,我明白你的观点,jar 或任何存档都应该保存在 bin 或 class 文件夹下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
相关资源
最近更新 更多