Java相对文件路径

时间:2011-12-26 19:32:26

标签: java file

我有一个Java问题,我一直遇到麻烦:什么是指示相对文件路径的好方法。

让我更具体一点。我希望能够始终在./configuration/file.txt中查找配置文件。我遇到的问题是,如果程序从文件所在的目录启动,我的程序才能正常工作。如果我从其他目录(如./directory/to/my/program/execute.sh启动它,那么它无法正常运行。

但是我还需要对这个文件进行更改,资源似乎想要只读......

4 个答案:

答案 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 );
}