我有以下代码行:
"%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,但这并没有解决问题。
在所有环境中路径应该是正确的。
答案 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 + ".", "")