在Java中使用相对目录路径

22

我正在尝试在Java类中使用相对路径来定位可执行文件,而不是像硬编码的行一样工作,但是使用以下内容失败:

final static String directory = "../../../ggla/samples/obj/linux_x86"

什么是在Java中使用相对路径的正确方式?


定义失败。你收到了什么错误信息?你是否在使用正确的操作系统路径分隔符(有一个Java系统变量用于路径分隔符,你应该使用它)? - Thomas Owens
你当前的目录是什么,那个文件在哪里? - akarnokd
6个回答

42

最可能的解释是您当前的目录与您认为的不一致。您可以检查user.dir系统属性以查看应用程序的基本路径,或者您可以执行以下操作:

 System.out.println(new File(".").getCanonicalPath());

在使用相对路径调试相对引用的开始位置之前。


3

使用System.out.println(System.getProperty("user.dir"));查看当前目录位置。然后,您可以使用相对路径从此地址开始。

或者,如果您不需要更新要读取的文件,请使用getResourceAsStream("filename");从类路径中获取它。

Karl


1
你需要使用getCanonicalPathgetCanonicalFile来解析相对路径。
System.out.println(new File("../../../ggla/samples/obj/linux_x86")
    .getCanonicalPath());

0

您可以像您所描述的那样使用相对路径,它应该可以工作。因此,错误可能出现在其他地方。

请发布一个完整的程序以重现您的错误,然后我们可能能够提供帮助。


0
我会首先使用Java File类中指定的分隔符和路径分隔符。但是,正如我在评论中所说的那样,我需要更多的信息才能提供帮助,而不仅仅是“它失败了”。

我不知道其他平台,但在WinXP+和Linux上,使用正斜杠似乎是可以工作的。但是,对于File.separator表示赞赏加1。 - akarnokd
我个人的应用程序通常很懒惰,使用正斜杠,但在生产代码(在工作中),我会将所有内容转换为使用 File 中的分隔符和路径分隔符。 - Thomas Owens

0

对于相对路径,也许你可以使用Java提供的方法之一作为相对路径的开头,例如getRelativePath....在Java中,你必须使用/而不是//来表示字符串!


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