Java的相对文件路径

6

我有一个Java问题一直困扰着我:如何表示相对文件路径。

让我更具体地说明。我希望能够始终在./configuration/file.txt中查找配置文件。我的问题是,如果从文件所在的目录以外的不同目录(例如./directory/to/my/program/execute.sh)启动程序,则它将无法正常工作。

但我还需要更改此文件,而资源似乎只读...


你是不是想说 ./configuration/file.txt 而不是 /configuration/file.txt。第二个路径是绝对路径,不应该有问题。 - Adam Paynter
谢谢,发现了错误,已纠正拼写错误。 - Alex Baranosky
如果您需要修改配置设置,则可以将真实配置文件的绝对路径放入资源中。 - Adam Paynter
4个回答

7

3
你需要提供一种定义目录的机制,例如通过环境变量、命令行参数、配置文件、首选项 API 等。请注意,不要修改 HTML 标签。

3
为了确保您的数据始终位于相同的位置,您可以利用主目录。利用主目录将使您在不同平台上具有一致性,并且您的程序可以访问数据而不管它所在的目录。
例如:
String userHomeDir = System.getProperty("user.home", ".");
String systemDir = userHomeDir + "/.collection";

然后,您可以使用类似以下方式检索文件:

String fileLocation = systemDir + "/file.txt";

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接