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

请教将文件内容反向输出的问题!
要求从一个文件读取内容后反向输出到另外一个文件,但是不能一个一个字节读,必须用一个buffer,大小自己定,每次读取一块内容放进buffer里。最后要使目的文件的内容是源文件的内容的翻转,比如原来是123456,现在是654321。
java中是否可以每次都从文件的开头写入内容而不覆盖当前文件内容?或者有没有什么现成的类似read的方法能够从后往前读?还是只能读一块然后翻转?请教大家有什么比较好的方法实现吗?

------解决方案--------------------
StringBuffer reverse() 
将此字符序列用其反转形式取代。
------解决方案--------------------
StringBuffer ss=new StringBuffer();
ss.append("123456");
System.out.print(ss.reverse());

结果为:
654321
------解决方案--------------------
java中是否可以每次都从文件的开头写入内容而不覆盖当前文件内容?
----------
否,
这个跟文件存储结构有关系,c/c++一样都不行
------解决方案--------------------
每次读一行,从最后读起,读完反转
------解决方案--------------------
二进制文件也要翻转?
------解决方案--------------------
用BufferReader.readline()
一个一个的append成一个stringbuffer
直接reverse,这样写的代码很简单。。。就几行。
但是我觉得看 reverse方法的算法来看,应该越大的字符串的反转的效率是越低的

可能要达到比较好的速度应该是 有某个临界值。调整调整。
------解决方案--------------------
用StringBuffer类的reverse是一个方法
不知道用RandomAccessFile 类可不可以从后向前读 我没这么试过。。。
------解决方案--------------------
import java.io.*;
import java.util.List;
import java.util.ArrayList;

public class Test{
public static void main(String args[])throws Exception{
File f1=new File("D:\text.txt");//在D盘之中建一个名为text.txt的文件,并输入文字
File f2=new File("D:\text2.txt");
BufferedReader r=new BufferedReader(new FileReader(f1));
BufferedWriter w=new BufferedWriter(new FileWriter(f2));

List tmp=new ArrayList();
String data=null;

while((data=r.readLine())!=null){
tmp.add(data);
}

for(int i=tmp.size()-1;i>=0;i--){
String s=(String)tmp.get(i);
for(int j=0;j<s.length();j++){
w.write(s,s.length()-j-1,1);
}
w.newLine();
}
r.close();
w.close();
}
}

枯眼望遥山隔水
儿忆父兮妻忆夫
往来曾见几心知
寂寥长守夜灯孤