我有一个Java问题,我一直遇到麻烦:什么是指示相对文件路径的好方法。
让我更具体一点。我希望能够始终在./configuration/file.txt
中查找配置文件。我遇到的问题是,如果程序从文件所在的目录启动,我的程序才能正常工作。如果我从其他目录(如./directory/to/my/program/execute.sh
启动它,那么它无法正常运行。
但是我还需要对这个文件进行更改,资源似乎想要只读......
答案 0 :(得分:7)
建议(以便应用程序独立于环境特定的详细信息)读取配置信息的方法是将其读作类路径资源而不是文件系统资源。请阅读 Smartly load your properties了解详情。
阅读Class.getResourceAsStream javadoc了解有关如何指定资源路径的语法
关于SO的有用帖子:Classpath resource within jar
答案 1 :(得分:3)
您需要提供一种定义目录的机制,例如通过环境变量,命令行参数,配置文件,首选项API等。
答案 2 :(得分:3)
为确保您的数据始终位于同一位置,您可以使用主目录。利用主目录将在不同平台上提供一定的一致性,并且您的程序可以访问数据,而不管它所在的目录。
例如:
String userHomeDir = System.getProperty("user.home", ".");
String systemDir = userHomeDir + "/.collection";
然后您可以稍后使用
之类的内容检索文件String fileLocation = systemDir + "/file.txt";
答案 3 :(得分:2)
如果您希望/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 );
}