Java中的相对文件路径

3

我有这段代码:

 Process p = Runtime.getRuntime().exec(command.toString(), null, 
                                          new File("D:\\Cognity"));

但问题是Cognity目录并不总是在D:\中,它也可能在C:\等其他位置。因此我的问题是是否有一种方式可以给它一个相对路径,这样我就不需要根据使用程序的计算机来更改代码了?


你的程序应该从用户那里请求路径作为输入。你不可能覆盖所有可能的路径。或者,你可以创建一个配置文件,在其中你/用户提供进程的路径,然后在你的程序中读取它。 - MD Sayem Ahmed
'Cognity'文件夹是否与此Java程序本身具有相对路径? - msangel
您可以检查将系统路径强制要求为应用程序。 - maress
Cognity是一个代码库,通常的路径为C:\Cognity、D:\Cognity、E:\Cognity等等。你懂的——通常只有目录不同,路径的其余部分都保持不变。 - Schadenfreude
3个回答

2

调用 System.getProperty("user.dir"); 来获取当前目录,然后将相对路径与结果连接。

例如:

String path = System.getProperty("user.dir");
path += relativePath;

编辑:

澄清:

例如: 您要运行的程序始终位于向后两个文件夹的位置,然后位于Temp目录。

因此,相对路径为 ..\\..\\Temp\\prog.exe。

假设在一台计算机上,您的程序位于C:\\Users\\user\\Documents\\Program,因此这是工作目录。

所以:

String path = System.getProperty("user.dir"); //returns the working directory
String relativePath = "\\ ..\\..\\Temp"; //no matter what is the first path, this is the relative location to the current dir
path += relativePath;
//in this example, path now equals C:\Users\user\Documents\Program\..\..\Temp\prog.exe = C:\Users\user\Temp\prog.exe
Process p = Runtime.getRuntime().exec(command.toString(), null, new File(path));

请再明确一下,relativePath应该设置成什么,还是只需要写成String relativePath = "";?然后,我应该这样使用命令: Process p = Runtime.getRuntime().exec(command.toString(), null, new File(relativePath)); - Schadenfreude
1
如果“工作目录”指程序执行的目录,则此方法行不通,因为此代码是JIRA插件的一部分,它与git存储库(Cognity)一起使用,因此无法保证存储库在工作目录中。 - Schadenfreude

2

由于System.getProperty("user.dir"));返回的是启动JVM的目录,因此您仍无法保证您在C:\还是D:\。我的建议是将Cognity位置作为-D命令行参数传递,并像这样使用:

Process p = Runtime.getRuntime().exec(command.toString(), null, new File(System.getProperty("cognity.dir")));


这也不起作用。System.getProperty("cognity.dir"))返回null。 - Schadenfreude
将其作为命令行参数传递。如果您还没有这样做,那么在尝试查找时它将为空。 - mickfagan

0
您可以使用配置文件来设置绝对路径,或在相对于JAR文件的相对路径中创建该目录。

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