这道IO题目,怎么做最优化呢?
我需要读去一个文本文件,然后把文件每一行的第25~30个字符设为#号,然后把每一行都输出到另外一个文件当中
while((String s1=in.readLine())!=null)
{
s1 转换为 char 数组;
for 循环
{
数组第25~30个设#号;
}
char 数组 转换为 String s2;
输出 s2;
}
有没有比这更好的方法呢?
特别想优化一下那转换过程
------解决方案--------------------StringBuffer类有一个setcharat()方法。
------解决方案--------------------如果想加快读写文件的速度,可以用内存映射文件
------解决方案--------------------1:减少IO次数
如果你的文件操作不是很大,可以把文件读入内存中并添加#号后再一起写入文件
或者读到一定量后再写入,不要每行写一次。这样会提高速度
2:string操作
for(int i=25;i <30 && i <chars.length;i++)
{
chars[i]= '# ';
}
------解决方案--------------------学习
------解决方案--------------------//FileTrans.java
import java.io.*;
public class FileTrans {
public static void main(String[] args) throws
IOException {
if (args.length < 2) {
System.out.println( "You must specify source and destination text file. ");
return;
}
File fi = new File(args[0]);
File fo = new File(args[1]);
BufferedReader reader = new BufferedReader(new FileReader(fi));
BufferedWriter writer = new BufferedWriter(new FileWriter(fo));
int ch = -1;
int cnt = 0;
try {
while ((ch = reader.read()) > = 0) {
cnt ++;
if (ch == '\r ' || ch == '\n ')
cnt = 0;
if (cnt > = 25 && cnt <= 30) {
writer.write( '# ');
} else {
writer.write(ch);
}
}
} finally {
reader.close();
writer.close();
}
}
}
------解决方案--------------------同意fool_leave的说法,忖道stringbuffer中减少io的操作次数,这样可以显著的提高读写的效率