我有一个txt文件,我想要做的是打开它并删除所有多个空格,使它们只变为一个。我用:
br = new BufferedReader(new FileReader("C:\\Users\\Chris\\Desktop\\file_two.txt"));
bw = new BufferedWriter(new FileWriter("C:\\Users\\Chris\\Desktop\\file_two.txt"));
while ((current_line = br.readLine()) != null) {
//System.out.println("Here.");
current_line = current_line.replaceAll("\\s+", " ");
bw.write(current_line);
}
br.close();
bw.close();
然而,至少据我所知,文件中没有任何内容。如果我使用system.out.println命令,它不会被打印,这意味着执行永远不会在while循环中...我做错了什么?感谢
答案 0 :(得分:5)
您正在阅读该文件,同时在其上写内容......不允许......
这样更好的方法是首先读取文件并将处理后的文本存储在另一个文件中,最后用新文件替换原始文件..这个
br = new BufferedReader(new FileReader("C:\\Users\\Chris\\Desktop\\file_two.txt"));
bw = new BufferedWriter(new FileWriter("C:\\Users\\Chris\\Desktop\\file_two_copy.txt"));
String current_line;
while ((current_line = br.readLine()) != null) {
//System.out.println("Here.");
current_line = current_line.replaceAll("\\s+", " ");
bw.write(current_line);
bw.newLine();
}
br.close();
bw.close();
File copyFile = new File("C:\\Users\\Chris\\Desktop\\file_two_copy.txt");
File originalFile = new File("C:\\Users\\Chris\\Desktop\\file_two.txt");
originalFile.delete();
copyFile.renameTo(originalFile);
它可能会有所帮助......
答案 1 :(得分:1)
您必须首先阅读然后写入,不允许您同时读取和写入同一文件,您需要使用RandomAccessFile
来执行此操作。
如果您不想学习新技术,则需要写入单独的文件,或将所有行缓存到内存(IE ArrayList
),但必须关闭{{1}在您初始化BufferedReader
之前,它会收到文件访问错误。
编辑:
如果您想查看它,这里有一个BufferedWriter
用例示例供您预期用途。值得指出的是,只有当最终行长度小于或等于原始行时才会有效,因为这种技术基本上会覆盖现有文本,但是应该非常快,内存开销很小,可以处理非常大的文件:
RandomAccessFile
答案 2 :(得分:1)
您的方法几乎没有问题:
file2
总是会创建一个新的空文件,阻止Path input = Paths.get("input.txt");
Path output = Paths.get("output.txt");
List<String> lines = Files.readAllLines(input);
lines.replaceAll(line -> line.replaceAll("\\s+", " "));
Files.write(output, lines);
Files.move(output, input, StandardCopyOption.REPLACE_EXISTING);
从您的文件中读取任何内容。您应该阅读cElementTree.parse()
中的内容,并在xml
中写下修改后的版本。之后,将import xml.etree.cElementTree as cET
# ...
def rename_xml_files(directory):
xml_files = [xml_file for xml_file in os.listdir(directory) ]
for filename in xml_files:
filename = filename.strip()
full_filename = directory + "/" +filename
print(full_filename)
parsed = cET.parse(full_filename)
del parsed
替换为{{1}}。
您的代码可能看起来或多或少像
{{1}}