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

这道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的操作次数,这样可以显著的提高读写的效率