【问题标题】:Windows escape sequence issue with file path in javajava中文件路径的Windows转义序列问题
【发布时间】:2013-12-17 23:08:34
【问题描述】:

我需要使用 windows 文件路径对文件进行一些操作,但我收到无效的转义序列错误。

File f = new File("C:\test");

系统只接受“\\”或“/”,但如果我从 Windows 复制文件路径,则它带有“\”。 我该如何解决这个问题

【问题讨论】:

  • 为什么不简单地查找每个 \ 并将其替换为 \\ ?
  • 问题是我应该在哪里存储带有“\”的文件路径,因为我不能使用字符串,因为它给出了相同的错误。

标签: java eclipse file-io io


【解决方案1】:

\ 是 Java 字符串中的转义字符。请改用\\

"C:\\test" 解析为字符串C:\test

【讨论】:

  • 如何替换我不想手动替换的转义字符。即每次我从 Windows 复制路径然后替换它。
  • @user2614607 你可以使用 String 的 replaceAll() 方法为你做这件事。
  • 不,您不能使用 replaceAll 来执行此操作。您必须自己替换它,或者使用您的 IDE 来提供帮助 - 任何好的 IDE 都将具有“替换选择中的文本”功能。
【解决方案2】:

您可以使用\\/,但/ 更好,因为它独立于操作系统。

将路径中的单个反斜杠替换为双反斜杠或单个正斜杠以解决您的问题。

在内部,Java 会将其转换为操作系统的文件分隔符

【讨论】:

  • 恕我直言,这是最好的方法。
【解决方案3】:

使用 File.seperator 代替“\”。

File f = new File("C:"+File.seperator+"test");

File.seperator 返回 "\",它不被视为 转义 字符。

如果您的文件 test.txt 保存在文件夹 D:/MyFloder/MyPrograms 中,您可以执行以下操作

File f = new File("D:"+File.seperator+"MyFloder"+File.seperator+"MyPrograms"+File.seperator+"test.txt");

编辑

您无需担心操作系统

对于 Unix:File.separator = /

对于 Windows:File.separator = \

【讨论】:

  • 如果我有这样的路径 "C:\eclipse\plugins\org.eclipse.core.runtime.compatibility.registry_3.5.200.v20130514-1256\META-INF" 使用是否有意义你的逻辑
  • 这还是太复杂了——只要使用/,JVM就会解决它。
【解决方案4】:

使用java.nio.file.Path 而不是java.io,转义序列字符不会有问题:

import java.nio.file.Path;
import java.nio.file.Paths;
    Path path = Paths.get("C:\test");

【讨论】:

  • 这是非常(!)错误的。在 Java 源代码 ` has to be replaced by \` 中,因为 ´\´ 是用于特殊字符的转义码。这与“io”或“nio”没有任何关系。
【解决方案5】:

File f = new File("C:\\test"); 是正确的。

您没有在此处创建路径为“C:\\test”的文件。您正在创建一个路径为“C:\test”的文件。 \\-to-\ 转换发生在您编译程序时 - 到您的程序运行时,双反斜杠已消失。

String 也一样——String s = "C:\\test"; 不会创建一个带有两个反斜杠的字符串,只有一个。

你可以这样想:字符串实际上没有两个反斜杠,但是你必须这样写才能把它放在你的代码中。

您可能想知道为什么会这样 - 这是因为反斜杠用于在字符串中插入特殊字符。例如,当您在字符串中键入\t 时,它会插入一个制表符。如果你想插入一个反斜杠,然后 t,你输入\\t

【讨论】:

  • 这会起作用,但是使用正斜杠并允许 JVM 在需要时进行转换非常简单。
【解决方案6】:

从 Windows XP 开始,您可以在路径中使用“/”(就像在 Linux 中一样),所以忘记 \

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多