您的位置:首页 > 编程语言 > Python开发

修改文件内容Java python

2017-08-24 10:54 676 查看
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