如何使用相对路径而不是绝对路径?

8

我遇到了一个与Java相关的奇怪问题。

我正在读写文件,所以路径对我来说非常重要。我希望所有文件都可以从相对路径中进行读写(即在我的类和Java文件的文件夹中)。

我这样写文件:

FileWriter fw = new FileWriter(outfile,true);
fw.write(data);
fw.close();

其中outfile类似于“out.txt”(即我们想要输出的文件名)。

问题在于,该文件被创建在“/home/me/”而不是我的其他文件路径中。

我做错了什么吗?或者我怎样才能将文件存储在相对目录中?


1
时间?http://zh.wikipedia.org/wiki/狭义相对论 - John Vint
也许“相对路径”这个术语不太准确。我的意思是在我的工作目录中(即文件构建的位置,执行文件所在的位置等)。 - Blackbinary
1
在Java中,这是一个有风险的概念,因为在某些环境中没有“当前目录”(即Web应用程序中的WAR文件)。此外,“当前目录”也不能保证是您的源代码或.class文件所在的目录。您必须更精确地定义您想要做什么。 - Jim Garrison
4个回答

7
FileWriter fw = new FileWriter("./" + outfile,true);

或者

FileWriter fw = new FileWriter("~/" + outfile,true);

我会尝试这个。

1
这个对我有效: FileWriter fw = new FileWriter("./" + outfile,true); - Andreas Ch.
对我有用,谢谢。 - Mojtaba

5
工作目录是你运行程序的位置,即你调用java YourClass的地方。因此,如果你想相对于正在执行的类编写文件,你需要知道当前目录并从那里附加相对路径,例如:
假设你有一个类test.YourClass,并且你从源根目录运行应用程序,即
java test.YourClass
你可以通过user.dir系统属性和类包名称找到类文件所在目录的绝对路径,如下所示:
public class YourClass {

public void printPath() {
    String path = String.format("%s/%s", System.getProperty("user.dir"), this.getClass().getPackage().getName().replace(".", "/"));
    System.out.println(path);
}

}


3

Java将文件保存相对于当前工作目录。当您运行程序时,是否在您的主目录内?

如果您始终希望文件相对于Java文件的位置而不是当前工作目录进行保存,您需要找到该目录并将其前置以获取绝对路径。


我猜那就是问题所在。我把所有文件都编译到了文件夹里(所以我在我的主目录而不是文件夹内部),并使用package.AClass来运行它。所以我想这就是答案。谢谢。 - Blackbinary

0

在命令行上设置user.dir属性,或者直接从您希望所有内容相对于的目录中运行(通过cd)


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