一个文件包含的都是字母,如一个111.txt文件,要对文件中的任意两个字母交换位置,怎样实现?
我写了这样的代码但不起作用,希望高手指点下
char[] s = new char[3];
RandomAccessFile rf = new RandomAccessFile("F:/111.txt","r");//随即读取
 s[0] = rf.readChar();//读取的一个字母
 s[1] = rf.readChar();//在读取的一个字母
 s[2] = s[0];//交换位置
 s[0]= s[1];
 s[1] = s[2];
这样能不能实现字母交换位置?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【hyhuizhen】截止到2008-07-03 13:28:14的历史汇总数据(不包括此帖):
    发帖的总数量:7                        发帖的总分数:80                       
    结贴的总数量:7                        结贴的总分数:80                       
    无满意结贴数:2                        无满意结贴分:20                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:28.57 %               无满意结分率:25.00 %                  
    敬礼!
      

  2.   

    是啊,就是如果文件中有abcdefg然后,将abcdefg中任意两个字母交换位置,然后再把文件更新为交换后的
    该怎么弄呢?
      

  3.   

    RandomAccessFile(String name, String mode) 
    创建从中读取和向其中写入(可选)的随机存取文件流,该文件具有指定名称。
      

  4.   

    可以,转换为读写模式rw,如果仅是字母,不要readChar,read专读byte,注意FilePointerimport java.io.IOException;
    import java.io.RandomAccessFile;public class Test {
    public static void main(String[] args) throws IOException {
    int[] s = new int[3]; 
    RandomAccessFile rf = new RandomAccessFile("111.txt","rw");//随即读取 
    s[0] = rf.read();//读取的一个字母 
    s[1] = rf.read();//在读取的一个字母 

    System.out.println(s[0]+" "+s[1]);

    s[2] = s[0];//交换位置 
    s[0]= s[1]; 
    s[1] = s[2]; 
    rf.seek(0);
    rf.writeByte(s[0]);
    rf.writeByte(s[1]);
    rf.close();
    }
    }
      

  5.   

    藐视是THINKING中的原版题目~没记错的话,这例题是用来说明nio的缓冲器的~
      

  6.   

    是不是THINKING中的原版题目不知道,是一个人给我出的题目,愣了两天没做出来
    哈哈
      

  7.   

    如果是aabaa,请问是不是应该输出文件错误?
      

  8.   

    import java.nio.*;
    import java.nio.channels.*;
    import java.io.*;
    public class Test
    {
    private ByteBuffer b=ByteBuffer.allocate(1024);
    public void method(String FileName)throws Exception
    {
    FileChannel f=new RandomAccessFile(FileName,"rw").getChannel();
    while((f.read(b))!=-1)
    {
    b.flip();
    while(b.hasRemaining())
    {
    b.();
    byte b1=b.get();
    byte b2=b.get();
    b.reset();
    b.put(b2);
    b.put(b1);
    }
    b.rewind();
    f.position(0);
    f.write(b);
    b.clear();
    }
    f.close();
    }
    public static void main(String[] args)throws Exception
    {
    String FileName="d:/qdb.txt";
    Test t=new Test();
    t.method(FileName);
    }
    }
    用nio写的,还一些方法忘了,这边没API~闷
      

  9.   

    交换就是修改
    你是要修改文件中的 字节的内容呢 
    还是要修改读取后的S[0],S[1]的内容?
    怎么看 你也只修改了 S[0],S[1]的内容
      

  10.   

    还个问题 我刚才那破程序没考虑的 如果读取的是单数  比如abc 那要交换成什么样子?
      

  11.   

    很厉害了,我的那个很简单,就是一交换就可以了,好厉害啊,我也有thinkingINJAVA 但是没怎看   向你学习了  要好好书了
    那个程序对我来说功能足够了
      

  12.   

    FilePointer是什么啊,我查API文档没查到.....嘿嘿
      

  13.   


                                                    br = new BufferedReader(new FileReader(f));
    s = br.readLine( );



    char[] cArray = s.toCharArray( );
    char c ;
    int random1 = (int)(Math.random()*26);
    int random2 = (int)(Math.random()*26);
    c = cArray[random1];
    cArray[random1] = cArray[random2];
    cArray[random2] = c;
      

  14.   

    给一个建议如果是任意字符的话,根据文件长度产生两个在这个长度内的随机数。
    然后通过seek()和readChar获得这两个字符。
    至于写回去,好像java的输入输出流都没有替换字符的函数。
    个人建议就是用readChar一个一个字符读出去,并且记录读取的长度,然后写到另外一个文件,在达到两个随机数的就交换写入。