我正在检查我的代码
我的Java应用程序使用Java6在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"));如果我想将字符串拆分为\,则需要将其加倍,因为\在正则表达式中具有特殊含义,因此使用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)但是在unix上没有这样的要求,相应的'/‘不应该被转义
编辑2:这个问题在Splitting filenames using system file separator symbol之前已经被问过了,解决方案归结为在输入周围使用Pattern.quote(),或者尝试使用文件方法而不是正则表达式。两者都有点不必要,我更希望文件能以一种独立于系统的方式来查看,而不是Java 7中的Path也有同样的问题。
编辑3:还看到从数据库读取/写入的问题,在该Storing Windows Path in Database and retrieving with Hibernate using java上创建了一个单独的问题
发布于 2012-06-28 17:36:56
是的,你是对的-如果你使用File.Seperator,你不需要任何额外的转义,因为在Windows中它已经为你转义了。来自java documentation的。
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 '\\'. https://stackoverflow.com/questions/11241762
复制相似问题