5

我正在审查我的代码

我的 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 检索

4

1 回答 1

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 '\\'. 
于 2012-06-28T09:36:55.620 回答