修改文件内容Java python

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值