我正在审查我的代码
我的 Java 应用程序使用 Java 6 在 Windows 和 Unix 上运行并处理文件。我知道我可以使用 file.separator 以独立于文件系统的方式获取文件分隔符,但是如果我曾经直接使用指定 windows 文件分隔符字符,因为 '\' 这也是我无法操作的 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:在使用系统文件分隔符拆分文件名之前已经问过这个问题,解决方案归结为在输入周围使用 Pattern.quote() 或尝试使用文件方法而不是正则表达式。如果可以以独立于系统的方式查看文件,我会更喜欢它,我不认为 Java 7 中的路径有同样的问题。
编辑 3:还看到从 db 读取/写入的问题,创建了一个单独的问题,关于在数据库中存储 Windows 路径并使用 java 使用 Hibernate 检索