【问题标题】:File path names for Windows and LinuxWindows 和 Linux 的文件路径名
【发布时间】:2014-01-07 19:00:24
【问题描述】:

下面是我的 Windows 目录的路径。通常路径应该有 \ 而不是 // 但两者似乎都有效。

String WinDir = "C://trash//blah//blah";

对于 Linux 路径也是如此。法线应该有 / 而不是 //。下面和上面的 sn-p 工作正常,会抓取指定文件的内容。

String LinuxDir = "//foo//bar//blah"

因此,两者都使用了奇怪的文件路径声明,但似乎都可以正常工作。请详细说明。

例如,

 File file = new File(WinDir);`
 file.mkdir();`

【问题讨论】:

标签: java


【解决方案1】:

通常,在 Windows 上指定文件路径时,您会使用反斜杠。但是,在 Java 和 Windows 世界之外的许多其他地方,反斜杠是转义字符,因此您必须将它们加倍。在 Java 中,Windows 路径通常如下所示:String WinDir = "C:\\trash\\blah\\blah";。另一方面,正斜杠不需要加倍并且在 Windows 和 Unix 上都可以使用。使用双正斜杠没有害处。它们对路径没有任何作用,只是占用空间(// 相当于/./)。看起来有人刚刚将所有反斜杠改为正斜杠。您可以删除它们。在 Java 中,有一个名为 File.separator(字符串)和 File.separatorChar(字符)的字段,根据您的平台为您提供正确的分隔符(/\)。在某些情况下使用它可能会更好:String WinDir = "C:" + File.separator + "trash" + File.separator + "blah" + File.separator + "blah";

【讨论】:

  • @SotiriosDelimanolis。当然。 // 等同于 /./。这是一个完全有效的构造。只是占用字符串中的空间。
  • 谢谢,这就是我一直好奇的地方。
  • 抱歉,我发现这条评论没用:WinDir = "C:" + File.separator + "trash"。如果您使用C:,那么获得File.separator 有什么意义?您已经知道它是 Windows,并且始终是反斜杠。
  • @user1156544。对于这个特殊的人为示例,您是绝对正确的。但是,您并不总是对所有路径元素进行硬编码,并且您并不总是知道您在哪个平台上运行。 Java 毕竟旨在成为一种跨平台语言。
  • 如果您广泛使用 Windows API,有几个函数只接受反斜杠。例如PathCchStripToRoot等路径操作函数。以及搜索函数NeedCurrentDirectoryForExePathW,由CreateProcessW调用判断是否为“.”应添加到其 EXE 搜索路径。此外,如果相对符号链接使用斜杠而不是反斜杠(例如“/rooted/relative/symlink”或“../parent/relative/symlink”),CreateSymbolicLinkW 会设置损坏的替代路径。这是一个错误,因为内核在评估链接时只保留反斜杠。
【解决方案2】:

使用 java.nio.path,您可以更好地获得独立的操作系统路径,而无需担心路径分隔符。

public class PathsGetMethod {
    public static void main(String[] args) {
        Path path = Paths.get("C:\\Users\\conta\\OneDrive\\", "desktop", "data");
        System.out.println(path); 
        //C:\Users\conta\OneDrive\desktop\data
    }
}

【讨论】:

    猜你喜欢
    • 2012-12-08
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多