Java相对文件路径
我有一个Java问题,我一直有麻烦:什么是一种很好的方式来指示相对文件路径。Java相对文件路径
让我更具体。我希望能够说,总是在./configuration/file.txt
寻找配置文件。我遇到的问题是,如果从程序文件所在的目录启动,我的程序将只能正常工作。如果我从其他目录(如./directory/to/my/program/execute.sh
)启动它,则无法正常运行。
但是我还需要更改这个文件,资源似乎想要为只读...
你需要通过一个环境变量定义的目录,如提供了一种机制,一个命令行参数,配置文件,首选项API等。
建议(以便应用程序独立于环境特定的详细信息)读取配置信息的方式是将其读取为类路径资源而不是一个文件系统资源。阅读 Smartly load your properties了解更多详情。
阅读Class.getResourceAsStream javadoc关于如何指定资源路径
有用的帖子在SO语法:Classpath resource within jar
如果你想/configuration/file.txt
表示相对于一些文件,你必须定义什么的东西是。我们通常会让某些东西成为“类路径或当前目录”。你将不得不编写一些代码来完成这个工作。下面的一些东西(未经测试)。
public InputStream getResource(String path) throws IOException {
// try relative to current directory
File file = new File(path);
if (file.exists()) {
return new FileInputStream(file);
}
// try the classpath
return Thread.currentThread().getContextClassLoader().getResourceAsStream(path);
}
为确保您的数据始终位于相同的位置,您可以使用主目录。利用主目录会给你在不同的平台一定的一致性,并不管你的程序可以访问它在目录中的数据
例如:
String userHomeDir = System.getProperty("user.home", ".");
String systemDir = userHomeDir + "/.collection";
然后你可以检索文件后来有类似的东西
String fileLocation = systemDir + "/file.txt";
另请参阅[本答案](http://stackoverflow.com/a/5052359/418556)。 – 2011-12-26 22:18:07
你的意思是'./configuration/file.txt'而不是'/ configuration/file.txt'。第二条路是绝对的,不应该引起问题。 – 2011-12-26 19:44:30
thx良好的捕获,纠正了错字 – 2011-12-26 21:34:01
如果您需要修改配置设置的功能,您可以将资源的* real *配置文件的绝对路径。 – 2011-12-26 23:46:11