【问题标题】:How to escape the backslashes and the automatically generated escape character in file path in java如何在java中的文件路径中转义反斜杠和自动生成的转义字符
【发布时间】:2011-09-26 10:18:01
【问题描述】:

我有一个非常小而简单的问题,但我没有得到解决方案。 实际上,我正在使用文件选择器获取 CSV 文件路径。 我正在使用加载数据本地 infile 查询将此 csv 文件中的数据输入到数据库中。

假设我输入的文件路径是“C:\title.csv” 当我将此字符串放入查询时,您将在路径中看到 \t 组合。这个 \t 实际上是文件路径的一部分,而不是转义字符 '\t'。但是java和mysql都认为是转义字符。

然后我尝试使用以下代码行将文件路径字符串中的“\”替换为“\\”。

String filepath="C:\title.csv";
String filepath2=filepath.replace("\\","\\\\");

对文件路径仍然没有影响,它仍然认为 '\t' 作为转义字符。

所以我的问题是如何在不更改文件名的情况下解决这个问题?

如果我们有类似的路径

String filepath="C:\new folder\title.csv";

它会将 \n 和 \t 视为转义字符。 如果路径中的文件或文件夹的名称导致转义字符,如何解决此问题?

【问题讨论】:

  • 请记住,如果您想使用 LOAD DATA INFILE,您要处理的文件必须在托管数据库服务器的机器上,因此您首先必须将文件上传到数据库服务器,发生这种情况后,您不应该为 Windows 路径而烦恼(除非服务器托管在 Windows 机器上)
  • @James DW @LordDoskias 朋友们好!詹姆斯我尝试了你的解决方案,但是当我放置 filepath.replace("\\","\\\"); 时它给出了编译错误; LordDoskian 我的数据库服务器和文件都在同一台机器和 Windows 操作系统上。我只想将 filepath="C:\new\title.csv" 设置为 "c:\\new\\title.csv"。因为将 '\' 替换为 '\\' 适用于普通路径行“C:\my\myfile.csv”,但不适用于上述文件路径,其中意外转义字符带有 '\' 和文件夹名称或文件名的组合。
  • 您如何注意到 Java 将文件路径中的 \n 视为转义字符?
  • @michael667 我采用字符串变量中的路径,即 String filepath="C:\title.csv" 并将其打印在控制台上,然后我尝试用 filepath.replace( "\\","\\\\");并再次在控制台上打印字符串以进行两次打印,它给了我相同的输出。谢谢。
  • 你能发布一段可编译的代码来重现这种行为吗?

标签: java escaping filepath backslash


【解决方案1】:

在Java 字符串文字中使用双斜杠来转义斜杠:

String s = "c:\\new folder\\title.csv";

如果最终用户在 JFileChooser 中输入字符串,则字符串变量将包含用户输入的所有字符。只有在 Java 源代码中使用字符串字面量时才需要转义。

并使用准备好的语句将字符串插入到数据库表中。这将正确地转义特殊字符并避免SQL injection 攻击。在Java tutorial about JDBC 中阅读有关准备好的语句的更多信息。

【讨论】:

  • @James DW @LordDoskias @JB Nizet 朋友们好!詹姆斯我尝试了你的解决方案,但是当我放置 filepath.replace("\\","\\\"); 时它给出了编译错误; LordDoskian 我的数据库服务器和文件都在同一台机器和 Windows 操作系统上。我只想将 filepath="C:\new\title.csv" 设置为 "c:\\new\\title.csv"。因为将 '\' 替换为 '\\' 适用于普通路径行“C:\my\myfile.csv”,但不适用于上述文件路径,其中意外转义字符带有 '\' 和文件夹名称或文件名的组合。
  • 如果用户在 JFileChooser 中输入某个路径,则返回的文件路径将包含反斜杠。您只需要在 Java 代码中转义字符串文字中的反斜杠。向我们展示您如何测试文件路径的内容。
  • 我应该如何在这个/ 中逃脱:str.replace(/ <samp>ــ</samp>$/, '')(我想在</samp> 中转义/
  • @stack 使用真实代码提出您自己的问题,而不是对 4 年前的答案使用评论。
  • 好的I asked,但我很确定人们给了我很多反对票..!
【解决方案2】:

你需要使用:

 String filepath2=filepath.replace("\\","\\\\");

【讨论】:

  • 你好朋友我试过了,但没有效果。问题就是这样
  • 也许你需要像filepath.replace("\n", "\\n")一样转义每个转义序列
  • @ Ankur Mittal 是的,这是可能的,但我正在寻找更简单的解决方案,因为在您的解决方案中,我们必须为每个转义序列字符编写给定的行。谢谢!
  • @Param-Ganak 你可以使用apache公共库StringEscapeUtils.escapeJava(str)
  • 朋友你好!这个库是 java 自带的还是我们必须在外部添加?这个图书馆是免费的吗?谢谢!
【解决方案3】:

String filepath2=filepath.replace("\","\\") 是无效代码 - \ 是字符串文字中的特殊字符,需要转义:

String escapedFilepath = filepath.replace("\\","\\\\"); //double all backslashes

【讨论】:

  • 你好朋友这是我的问题中的输入错误,我已经编辑了我的问题。谢谢。
【解决方案4】:

您必须在初始文字(filepath)中使用转义,例如:

String filepath="C:\\title.csv"

【讨论】:

    猜你喜欢
    • 2013-07-11
    • 1970-01-01
    • 2012-12-20
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多