我必须编辑文件的内容并将编辑过的conted写入另一个文件。这是我使用的代码。
import java.io.*;
import java.util.*;
public class TestRef {
ArrayList<String> lines = new ArrayList<String>();
String line= null;
public void printThis(){
try{
FileReader fr = new FileReader("C:\\Users\\questions.txt");
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter("C:\\Users\\questions_out.txt");
BufferedWriter out = new BufferedWriter(fw);
while((line=br.readLine()) != null) {
if(line.contains("Javascript"))
line.replace("Javascript"," JAVA");
lines.add(line);
out.write(line);
}
}
catch(Exception e){}
}
public static void main(String [] args){
TestRef tr = new TestRef();
tr.printThis();
}
}
所以这就像一次读一行并将其打印回文件。但是当我执行此代码时,输出文件是空白的。能否请您提供示例代码,如何从文件中读取内容,更改内容并将整个文件写入新文件?
答案 0 :(得分:4)
好吧,有几个问题:
finally
块中关闭基于流的资源,以便即使面对异常它们也会被关闭。 (鉴于你应该正在关闭,我也不会明确地刷新。只要确保你关闭顶级抽象 - 即out
(和br
) Exception
,然后吞了它。很可能是异常被抛出,但你无法分辨,因为你吞下了它。你应该至少记录它,并可能在那时停止。 (我还建议抓取IOException
而不是Exception
。)FileWriter
和FileReader
,它不允许您指定输入/输出编码 - 这里不是问题,但我个人希望更多地控制我使用的编码。我建议在FileInputStream
和FileOutputStream
中使用InputStreamReader
和OutputStreamWriter
。您正在调用String.replace()
并忽略结果。字符串是不可变的 - 调用replace
不会更改现有的字符串。你想要:
line = line.replace("Javascript"," JAVA");
lines
变量,而line
变量会更好地作为本地变量。它只与方法本身相关,因此只有在方法中声明。第一个是你当前问题的最可能原因,但其余的应该有助于你过去。 (关于“替换”的观点可能是你的下一个问题......)
答案 1 :(得分:0)
您遗失out.flush()
。
BufferedWriters在您刷新它们或缓冲区填满之前不会写任何东西。
答案 2 :(得分:0)
在循环外关闭打印编写器。
out.flush();
out.close();
此外,您正在为新行编写字符串,如果您只是想用Java替换javascript,那么您可能还想将'\ n',下一行字符写入新文件,其中旧文件包含新行。