windows 环境中的文件路径问题

File path problems in windows environment

我有下面一行代码:

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

如果我在 window 中打印这一行,我会得到错误的文件路径:

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

在 unix 中,文件路径正确。

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

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

当前工作目录.取决于应用程序的启动方式,即启动位置。您可能会使用

System.getProperty("user.dir")

而不是获取绝对路径。

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

solution/workaround可能是在Windows下有一个批处理文件。

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

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

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

你想怎么标准化就怎么标准化。

替换

"%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 + ".", "")

使用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());