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());
我有下面一行代码:
"%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());