日期:2014-05-20  浏览次数:20841 次

用javaSE如何修改txt文本内容
自己创建一个文本文件为record.txt后,写入了如下两行数据:

Java code

00 11 33 33 44 
55 66 77 88 99



然后要把第一个出现的“33”改成符合顺序的“22”.
用代码怎么改呢??

------解决方案--------------------
执行下面程序:record1.txt为lz所要的结果。

import java.io.*;

public class BufferedReaderTest {
public static void main(String[] args) {
BufferedReader br = null;
InputStreamReader isr = null;
FileInputStream fis = null;

BufferedWriter bw = null;
OutputStreamWriter osw = null;
FileOutputStream fos = null;

try {
fis = new FileInputStream("D:\\record.txt");
isr = new InputStreamReader(fis);
br = new BufferedReader(isr);

fos = new FileOutputStream("D:\\record1.txt");
osw = new OutputStreamWriter(fos);
bw = new BufferedWriter(osw);

String str = null;
int i = 0;
while ((str = br.readLine()) != null) {
String[] ss = str.split(" ");
if (i == 0) {
for (String s : ss) {
// 避免一行中出现多个33
if ("33".equals(s) && i == 0) {
str = str.replaceFirst("33", "22");
i++;
}
}
}
bw.write(str);
bw.newLine();
bw.flush();
}

} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bw.close();
osw.close();
fos.close();
br.close();
isr.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}
}

------解决方案--------------------
就是采取这种方法的,先把所有的文字全部读入到内存中,改完后再写回去。

所有的文本编辑器也都是这么做的。
------解决方案--------------------
探讨
引用:
执行下面程序:record1.txt为lz所要的结果。

import java.io.*;

public class BufferedReaderTest {
public static void main(String[] args) {
BufferedReader br = null;
InputStreamReader isr = null;
FileInputStream fis = null;

BufferedWriter bw = null;
OutputStreamWriter osw = null;
FileOutputStream fos = null;

try {
fis = new FileInputStream("D:\\r…

------解决方案--------------------
探讨
引用:
执行下面程序:record1.txt为lz所要的结果。

import java.io.*;

public class BufferedReaderTest {
public static void main(String[] args) {
BufferedReader br = null;
InputStreamReader isr = null;
FileInputStream fis = null;

BufferedWriter bw = null;
OutputStreamWriter osw = null;
FileOutputStream fos = null;

try {
fis = new FileInputStream("D:\\r…

------解决方案--------------------
是的,如果用 RandomAccessFile 也可以回去的,但是很麻烦,得判断换行符,得不偿失。

从头一行一行地读的话,速度是非常快的。

PS:为什么不先读 80 行,再读 100 行呢?奇怪,一定要先读完 100 行,再去读 80 行么?