我正在尝试用java编辑文件。
我想在我的文件中使用\“
逃避每个报价我尝试了这样(关于stackoverflow的其他解决方案,我可以复制哪些代码):
public void replaceInFile(File file) throws IOException {
File tempFile = new File("twittergeoUpdate.csv");
FileWriter fw = new FileWriter(tempFile);
Reader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
while (br.ready()) {
fw.write(br.readLine().replaceAll("\"", "\\\"") + "\n");
}
fw.close();
br.close();
fr.close();
}
我太快了......这对我不起作用。报价只是在我的文件中保持不变。有什么想法吗?
答案 0 :(得分:3)
\\\"
只能转义"
(双引号),你必须逃避反斜杠,这需要5个反斜杠。 \\\\\"
s.replaceAll("\"", "\\\\\"")
答案 1 :(得分:2)
您应该使用Apache StringEscapeUtils#escapeJava()
包中的commons-lang
。
像这样:
org.apache.commons.lang.StringEscapeUtils.escapeJava(<yourStringLiteralHere>)
来自javadoc :
StringEscapeUtils#escapeJava()
使用Java
字符串规则转义字符串中的字符。
正确处理引号和控制字符(制表符,反斜杠,cr,ff等)
因此标签变为字符'\'和't'。
Java
字符串与JavaScript
字符串之间的唯一区别在于JavaScript
,必须对单引号进行转义。
示例强>:
答案 2 :(得分:1)
我编码:
public void replaceInFile(File file) throws IOException {
File tempFile = new File("twittergeoUpdate.csv");
FileWriter fw = new FileWriter(tempFile);
Reader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
while (br.ready()) {
fw.write(br.readLine().replaceAll("\"", "\\\\\"") + "\n");
}
fw.close();
br.close();
fr.close();
}//replaceInFile
正确的替换字符串是\\\“(5反斜杠,而不是3)
答案 3 :(得分:1)
基本问题是您无法写入正在阅读的文件而不期望它会更改。在您的情况下,FileWriter做的第一件事就是 truncate 该文件。我见过一些例子,读者仍然设法阅读但它已被破坏。
您必须写入临时文件,关闭这两个文件,并在完成替换(使用删除并重命名)原始文件时使用临时文件。