java中文件路径的Windows转义序列问题

java中文件路径的Windows转义序列问题,java,eclipse,file-io,io,Java,Eclipse,File Io,Io,我需要使用windows文件路径对文件执行某些操作,但我遇到无效的转义序列错误 File f = new File("C:\test"); 系统只接受“\\”或“/”,但如果我从windows复制文件路径,它将带有“\”。 如何解决这个问题\是Java字符串中的转义字符。改用\\ “C:\\test”解析为字符串C:\test\是Java字符串中的转义字符。使用\\代替 “C:\\test”解析为字符串C:\test您可以使用\\或/但是/更好,因为它是独立于操作系统的 用双反斜杠或单正斜杠替

我需要使用windows文件路径对文件执行某些操作,但我遇到无效的转义序列错误

File f = new File("C:\test");
系统只接受“\\”或“/”,但如果我从windows复制文件路径,它将带有“\”。
如何解决这个问题

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


“C:\\test”
解析为字符串
C:\test

\
是Java字符串中的转义字符。使用
\\
代替


“C:\\test”
解析为字符串
C:\test

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

用双反斜杠或单正斜杠替换路径中的单反斜杠以解决问题


在内部,Java会将其转换为操作系统的文件分隔符,您可以使用
\
/
,但是
/
更好,因为它是独立于操作系统的

用双反斜杠或单正斜杠替换路径中的单反斜杠以解决问题


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

使用file.separator代替“\”

File.separator返回“\”且不作为转义字符处理

如果您的文件
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=\

使用File.separator代替“\”

File.separator返回“\”且不作为转义字符处理

如果您的文件
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=\

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

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

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

import java.nio.file.Path;
import java.nio.file.Paths;
    Path path = Paths.get("C:\test");
File f=新文件(“C:\\test”)是正确的

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

字符串也一样-
String s=“C:\\test”不创建带有两个反斜杠(只有一个)的字符串

您可以这样想:字符串实际上没有两个反斜杠,但您必须这样编写才能将其放入代码中

您可能想知道为什么会这样——因为反斜杠用于在字符串中插入特殊字符。例如,当您在字符串中键入
\t
时,它会插入一个选项卡。如果要插入反斜杠,则输入t,键入
\\t

文件f=新文件(“C:\\test”)是正确的

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

字符串也一样-
String s=“C:\\test”不创建带有两个反斜杠(只有一个)的字符串

您可以这样想:字符串实际上没有两个反斜杠,但您必须这样编写才能将其放入代码中


您可能想知道为什么会这样——因为反斜杠用于在字符串中插入特殊字符。例如,当您在字符串中键入
\t
时,它会插入一个选项卡。如果您想插入反斜杠,那么t,您可以键入
\\t

您可以在自Windows XP以来的路径中使用“/”(如在Linux中),所以忘记\

您可以在自Windows XP以来的路径中使用“/”(如在Linux中),所以忘记\

为什么不简单地查找每个\并将其替换为\?问题是我应该在哪里用“\”存储文件路径因为我不能使用字符串,因为它会产生相同的错误。为什么不简单地查找每个\并将其替换为\?问题是我应该在哪里用“\”存储文件路径,因为我不能使用字符串,因为它会产生相同的错误。我如何替换我不想手动替换的转义字符。i、 e.每次我从windows复制路径,然后替换它。@user2614607您可以使用String的
replaceAll()
方法为您执行此操作。不,您不能使用replaceAll执行此操作。你必须自己替换它,或者使用你的IDE来帮助-任何好的IDE都有一个“替换选择中的文本”功能。我如何替换我不想手动替换的转义字符。i、 e.每次我从windows复制路径,然后替换它。@user2614607您可以使用String的
replaceAll()
方法为您执行此操作。不,您不能使用replaceAll执行此操作。你必须自己替换它,或者使用你的IDE来帮助-任何好的IDE都会有一个“替换选择中的文本”功能。如果我有这样的路径“C:\eclipse\plugins\org.eclipse.core.runtime.compatibility.registry_3.5.200.v20130514-1256\META-INF”使用您的逻辑是否有意义这仍然过于复杂--只需使用
/
,JVM就会解决它。如果我有这样的路径“C:\eclipse\plugins\org.eclipse.core.runtime.compatibility.registry_3.5.200.v20130514-1256\META-INF”使用您的逻辑是否合理这仍然过于复杂--只需使用
/
,JVM就会解决它。这是非常(!)错误的。在Java源代码中,
`必须替换为
\`因为´\`是用于特殊字符的转义码。这与“io”或“nio”毫无关系。这是非常(!)错误的。在Java源代码中
`