如何在Windows上处理Windows和UNIX上的不同file.separator

Pau*_*lor 4 java file

我在查看我的代码

我的Java应用程序使用Java 6在Windows和Unix上运行并操作文件.我知道我可以使用file.separator以文件系统独立的方式获取文件分隔符,但是如果我曾经直接使用指定windows文件分隔符char,因为'\'也是Java转义字符,我无法操作文件路径.因此,在我的代码中,我总是将文件路径存储在unix表示法中,将''替换为'/',这些路径存储在数据库中,所以我认为那里也有一个逃避问题.所以我认为尝试使用file.separator也会失败,因为它会返回'\'而不是'\',但现在只知道需要\如果我实际上只是用引号指定它​​.

现在我认为这是不必要的,只要我总是使用file.separator我不需要做这个转换,我是对的吗?

编辑:发现一个似乎是一个问题的案例

"C:\Fred\test1.txt".split("\\\\");
"C:\Fred\test1.txt".split(System.getProperty("file.separator"));
Run Code Online (Sandbox Code Playgroud)

如果我想将字符串拆分为\我已经加倍了,因为\在正则表达式中有特殊含义,所以使用file.separator的行失败了

java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
 ^
    at java.util.regex.Pattern.error(Pattern.java:1713)
    at java.util.regex.Pattern.compile(Pattern.java:1466)
    at java.util.regex.Pattern.<init>(Pattern.java:1133)
    at java.util.regex.Pattern.compile(Pattern.java:823)
Run Code Online (Sandbox Code Playgroud)

但是在unix上没有这样的要求,相应的'/'不应该被转义

编辑2:这个问题已经被问过使用系统文件分隔符分割文件名的解决方案可以归结为使用Pattern.quote()围绕输入或试图使用文件的方法,而正则表达式.如果文件可以通过系统独立的方式查看,我会更喜欢它,我不喜欢它,我不是说Java 7中的Path有同样的问题.

编辑3:还看到从db读取/写入的问题,创建了一个单独的问题,在数据库存储Windows路径和使用Java检索Hibernate

kjp*_*kjp 5

是的,你是对的 - 如果你使用File.Seperator你不需要任何额外的转义,因为在Windows中它已经为你逃脱了.来自java 文档.

separatorChar

public static final char separatorChar

The system-dependent default name-separator character. 
This field is initialized to contain the first character of the value of the system property file.separator. 
On UNIX systems the value of this field is '/';
on Microsoft Windows systems it is '\\'. 
Run Code Online (Sandbox Code Playgroud)