【发布时间】:2011-06-22 22:10:39
【问题描述】:
假设我有一个 Java 类需要访问具有绝对路径的文件 /home/gem/projects/bar/resources/test.csv:
package com.example
class Foo {
String filePath = ????? // path to test.csv
String lines = FileInputStream(new File(filePath).readAllLines();
}
Foo.java 的路径是 /home/gem/projects/bar/src/com/example。
当然我不能指定资源文件的绝对路径。这是因为 jar 文件将作为库分发给任何客户在他们自己的环境中使用。
假设像 test.csv 这样的资源文件始终位于相对于项目根目录的同一路径中。当创建一个包含 Foo.class 的 jar 时,这个 jar 还包含 test.csv 在相同的相对路径(相对于项目根目录)。
指定相对路径的方法是什么,无论项目栏移动到何处都可以使用?另外如何创建一个 jar 文件(可以在任何位置),以便资源文件 test.csv 的路径仍然正确。
为了简单起见,我使用了无效的 Java API(readAllLines(),它读取所有行并返回包含整个文件内容的字符串。也没有使用 try/catch)。
假设 csv 文件可以读取和写入。
我希望这现在清楚了。
【问题讨论】:
-
“无论项目移动到哪里都可以使用的相对路径”在术语上是矛盾的 - 除非您以相同的方式移动资源文件(即资源是项目的一部分) .不过,我想你就是这种情况。为什么您“当然”不能指定绝对路径?您是在制作 JAR 还是只是在运行类文件?您使用什么命令来运行程序(包括类路径),以及从哪个起始目录?
-
作为只读的CSV,还是需要写入?
-
我不明白这个问题。 csv 必须在 jar 中,在 jar 所在的同一目录中或其中任何一个目录中吗?