2011-12-26 191 views
6

我有一个Java问题,我一直有麻烦:什么是一种很好的方式来指示相对文件路径。Java相对文件路径

让我更具体。我希望能够说,总是在./configuration/file.txt寻找配置文件。我遇到的问题是,如果从程序文件所在的目录启动,我的程序将只能正常工作。如果我从其他目录(如./directory/to/my/program/execute.sh)启动它,则无法正常运行。

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

+0

你的意思是'./configuration/file.txt'而不是'/ configuration/file.txt'。第二条路是绝对的,不应该引起问题。 – 2011-12-26 19:44:30

+0

thx良好的捕获,纠正了错字 – 2011-12-26 21:34:01

+0

如果您需要修改配置设置的功能,您可以将资源的* real *配置文件的绝对路径。 – 2011-12-26 23:46:11

回答

3

你需要通过一个环境变量定义的目录,如提供了一种机制,一个命令行参数,配置文件,首选项API等。

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

为确保您的数据始终位于相同的位置,您可以使用主目录。利用主目录会给你在不同的平台一定的一致性,并不管你的程序可以访问它在目录中的数据

例如:

String userHomeDir = System.getProperty("user.home", "."); 
String systemDir = userHomeDir + "/.collection"; 

然后你可以检索文件后来有类似的东西

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

另请参阅[本答案](http://stackoverflow.com/a/5052359/418556)。 – 2011-12-26 22:18:07