Windows环境中的文件路径问题

时间:2015-08-19 15:06:01

标签: java filepath

我有以下代码行:

"%s/ramp_adapter/user_%d/ramp_file_receipt/%d".format(new java.io.File(".").getAbsolutePath().replace("/.",""), endpointId, fileId)

如果我在窗口中打印此行,则会出现错误的文件路径:

E:\git\project\codeAdapters\rampAdapter\./ramp_adapter/user_1001/ramp_file_receipt/3

在unix中,文件路径正确。

我知道我需要让它与Windows兼容,因此我尝试使用FilenameUtils,但这并没有解决问题。

在所有环境中路径应该是正确的。

4 个答案:

答案 0 :(得分:2)

使用File.getCanonicalFile()来规范生成的字符串。它会转换为正确的分隔符,也会删除.个路径段。

String s = "E:\\git\\project\\codeAdapters\\rampAdapter\\./ramp_adapter/user_1001/ramp_file_receipt/3";
File f = new File(s).getCanonicalFile();
assertEquals("E:\\git\\project\\codeAdapters\\rampAdapter\\ramp_adapter\\user_1001\\ramp_file_receipt\\3", f.toString());

答案 1 :(得分:0)

当前工作目录.取决于应用程序的启动位置。你可以使用

System.getProperty("user.dir")

而不是获得绝对路径。

它可能会出现同样的问题:在Windows下点击会有问题。

解决方案/解决方法可能是在Windows下有一个批处理文件。

我倾向于在用户的主文件夹中使用依赖于应用程序的目录。隐藏前一段时间时:

File myAppDir = new File(System.getProperty("user.home") + "/.myappname";
myAppDir.mkdir();

答案 2 :(得分:0)

1)使用System.getProperty(" file.separator")获取当前的OS文件 分隔器。 2)新的java.io.File("。")。getAbsolutePath()将在Windows中的Linux和Windows路径中返回linux路径(/etc/uus/.)(例如:C:\ xpto \ SDFS。)

您需要按照自己的意愿进行标准化。

答案 3 :(得分:0)

替换

"%s/ramp_adapter/user_%d/ramp_file_receipt/%d"

"%s" + File.separatorChar + "ramp_adapter" + File.separatorChar + "user_%d" + File.separatorChar + "ramp_file_receipt" + File.separatorChar + "%d"

替换

getAbsolutePath().replace("/.","")

getAbsolutePath().replace(File.separator + ".", "")