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

解决方案 »

  1.   

    StringBuffer reverse() 
              将此字符序列用其反转形式取代。 
      

  2.   

    StringBuffer  ss=new StringBuffer();
    ss.append("123456");
            System.out.print(ss.reverse());结果为:
    654321
      

  3.   

    java中是否可以每次都从文件的开头写入内容而不覆盖当前文件内容?
    ----------
    否,
    这个跟文件存储结构有关系,c/c++一样都不行
      

  4.   

    用stringbuffer是可以,但是如果文件很大呢?不能一直append下去吧还有,如果是普通二进制文件的话,也能用stringbuffer吗?现在的要求是,不要一个一个字节读写,太慢,每次次读写一个buffer大小的内容,最后输出的内容是源内容的翻转是否可以这样:假设buffer的大小为1024,先判断文件大小,如果文件比文件大,且刚好是buffer大小的n倍,则从源文件尾部进行n次读写,如果文件比buffer小,或者是buffer的n倍还多一点零头,那就先从文件尾部把零头读取并翻转后写入目的文件,然后同理进行n次读取,翻转和写入不过觉得这个办法好麻烦,有更高效的方法吗?
      

  5.   

    是啊,随便什么文件都要按字节翻转,虽然我相信svn自动测试的时候应该是用文本测试。。但还是小心点好。。
      

  6.   

    用BufferReader.readline()
    一个一个的append成一个stringbuffer
    直接reverse,这样写的代码很简单就几行。
    但是我觉得看 reverse方法的算法来看,应该越大的字符串的反转的效率是越低的可能要达到比较好的速度应该是 有某个临界值。调整调整。
      

  7.   

    用StringBuffer类的reverse是一个方法
      不知道用RandomAccessFile 类可不可以从后向前读 我没这么试过
      

  8.   

    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();
    }
    }枯眼望遥山隔水
    儿忆父兮妻忆夫
    往来曾见几心知
    寂寥长守夜灯孤