Java:
文件内容:RandomAccessFile raf = new RandomAccessFile("C:\\1.txt", "rw"); String s = raf.readLine(); long pointer =0; while(s!=null) { System.out.println(s); if(s.contains("py")) { raf.seek(pointer); raf.writeBytes("hello python"); } pointer = raf.getFilePointer(); s = raf.readLine(); }
hello world
hello c++
hello python
hello c
hello java
结果:
hello world
hello c++
hello pythonllo c
hello java
分析:RandomAccessFile是随机读取文件类,不涉及stream操作,涉及指针移动操作,修改文件内容可能丢失数据,见代码(覆盖掉了其所占位置的原来的字符)
利用流替换:
全部加载到内存中进行替换(用正则):
File f =new File("C:\\1.txt"); BufferedReader br = new BufferedReader(new FileReader(f)); StringBuffer src = new StringBuffer(); StringBuffer dst = new StringBuffer(); String line = null; while((line=br.readLine())!=null) { src.append(line); src.append(System.getProperty("line.separator"));//换行符 } Pattern p =Pattern.compile("py"); Matcher m = p.matcher(src); while(m.find()) { m.appendReplacement(dst, "python"); } m.appendTail(dst); BufferedWriter bw = new BufferedWriter(new FileWriter(f)); bw.write(dst.toString()); bw.flush(); br.close(); bw.close();
读一行,替换一行,写一行
File f =new File("C:\\Users\\Casey\\Desktop\\1.txt"); BufferedReader br = new BufferedReader(new FileReader(f)); BufferedWriter bw = new BufferedWriter(new FileWriter(f)); String line = null; while((line=br.readLine())!=null) { String newLine = line.replace("py", "python"); System.out.println(newLine); bw.write(newLine); bw.write(System.getProperty("line.separator"));//换行符 } bw.flush(); br.close(); bw.close();
上面的方法是不可以使用的,Java不支持对一个文件同时读写流操作。
应该先写入另外一个文件,再重命名。
File f =new File("C:\\Users\\Casey\\Desktop\\1.txt"); File f2 =new File("C:\\Users\\Casey\\Desktop\\2.txt"); BufferedReader br = new BufferedReader(new FileReader(f)); BufferedWriter bw = new BufferedWriter(new FileWriter(f2)); String line = null; while((line=br.readLine())!=null) { String newLine = line.replace("py", "python"); System.out.println(newLine); bw.write(newLine); bw.write(System.getProperty("line.separator"));//换行符 } bw.flush(); br.close(); bw.close(); if(f.exists()) { f.delete(); } f2.renameTo(f);

本文介绍了在Java和Python中修改文件内容的不同方法。在Java中,使用RandomAccessFile可能导致数据丢失,而通过流进行替换更安全,可以将文件内容加载到内存中进行替换或者逐行读取替换后再写入。Python中未提及具体实现,但建议先写入临时文件再进行重命名以确保数据完整。
660

被折叠的 条评论
为什么被折叠?



