gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 02:30:14 24 4
gpt4 key购买 nike

我正在审查我的代码

我的 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:这个问题之前有人问过Splitting filenames using system file separator symbol解决方案归结为在输入周围使用 Pattern.quote() 或尝试使用文件方法而不是正则表达式。如果可以以系统独立的方式查看文件,我会更喜欢它,我不认为 Java 7 中的 Path 有同样的问题。

编辑 3:还看到从数据库读取/写入的问题,创建了一个单独的问题 Storing Windows Path in Database and retrieving with Hibernate using java

最佳答案

是的,你是对的 - 如果你使用 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 '\\'.

关于java - 如何在 java 中处理 Windows 和 UNIX 上的不同 file.separator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11241762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com