import java.io.*;
public class RandomAccessFileExa1
{ public static void main(String[] args) 
{ try
   { File f=new File("G://java code/jackxu/src","good.txt");
 RandomAccessFile in_and_out=null;
 int data[]={1,2,3,4,5,6,8,9,10};
 in_and_out=new RandomAccessFile(f,"rw");
 for(int i=0;i<data.length;i++)
 {in_and_out.writeInt(data[i]);
 }
 for(long i=data.length-1;i>0;i--)
 {in_and_out.seek(i*4); 
   System.out.print(","+in_and_out.readInt());   
 }
 in_and_out.close();
   }
  catch(Exception e){}
  
    }
 }
上面的代码是 RandomAccessFile类,我把整行变量数组写入到good.txt,为什么写入到good.txt
全是乱码?这个怎么解决??

解决方案 »

  1.   

    文件里面当然是乱码咯。
    楼主去看看API,里面明确说了,写到文件里面的是4个字节表示的数字,不是字符。而且,字符要讲编码的。
    楼主写入的文件,扩展名是txt,windows系统会把这个文件按字符文件处理,字符编码按操作系统默认编码。
    也就是说,如果双击打开该文件,一般情况下系统会将该文件的数据,
    按照GB2312编码打开,由于里面存放的不是字符数据,
    所以,按照GB2312编码方式来解码,解出来的基本是乱码。解决这个问题,楼主可以尝试:
    将data[]数组的类型声明成char型的,
    并且调用writeChar和readChar方法进行存取操作,
    当然,这些字符的编码是按照Unicode编码方式进行保存的。
    如果打开文件还是乱码(记事本程序不支持Unicode编码),
    这就比较麻烦了。
    要么,换个程序打开该文件(如,Word、WPS、等等)
    要么,换个编码进行存取(这个比较麻烦)
      

  2.   

    刚刚按楼上所说,把 int数组换成char数组,调用writeChar方法,可以正常写入,使用RandomAccessFile类的对象把数据写入到文件中时。多次运行程序,文件没有把之前的数据重写一遍,这个什么原理????
      

  3.   

    for(long i=data.length-1;i>0;i--)in_and_out.seek(i*4);好好看清这两句的意思。
    去查seek的API,
    比较每次运行的i*4,
    哎~