该代码中,已经把“中”以gbk的方式进行存储,而后又以gbk编码的形式将其读取,为什么还会出现乱码?
txt文本的编码是ansi,虽然你写入时设置了gbk(txt文件中可以正常显示)但是控制台输出的编码是utf-8和ansi不相符合,所以出现乱码。个人意见,还请指正.
pppp
oo o lo o
oo oo
oo
l
oolo
o
lo
ooo o
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
public class RafDome {
public static void main(String[] args) throws IOException {
File demo = new File("demo");
if(!demo.exists()){
demo.mkdir();
}
File file =new File(demo,"ra.dat");
if(!file.exists()){
file.createNewFile();
}
RandomAccessFile raf =new RandomAccessFile(file,"rw");
System.out.println(raf.getFilePointer());
String s="AB123456中国人民政府";
byte[] buf =s.getBytes("gbk");
System.out.println(buf.length);
raf.write(buf.length);
raf.write(buf);
raf.seek(0);
byte [] bu =new byte[(int)raf.read()];
raf.read(bu);
String str= new String(bu,"gbk");
System.out.println(str);
raf.close();
}
}
//这里我写了一个批量写入和读取
public class RandomAccessFileTest { public static void main(String[] args)throws IOException { File file1=new File("demo"); if(!file1.exists()) file1.mkdir(); File file2=new File(file1,"a.txt"); if(!file2.exists()) file2.createNewFile(); RandomAccessFile raf = new RandomAccessFile(file2, "rw"); //指针的位置 System.out.println(raf.getFilePointer()); raf.write('a');//只写一个字节 System.out.println(raf.getFilePointer()); raf.write('b'); System.out.println(raf.getFilePointer()); int i=0x7fffffff; raf.write(i>>>24);//写入后八位 System.out.println(raf.getFilePointer()); raf.write(i>>>16); System.out.println(raf.getFilePointer()); raf.write(i>>>8); System.out.println(raf.getFilePointer()); raf.write(i); System.out.println(raf.getFilePointer()); raf.writeInt(i); System.out.println(raf.getFilePointer()); String string="中"; byte[] byte1=string.getBytes("gbk"); raf.write(byte1);//汉字在gbk编码中占两个字节 System.out.println(raf.getFilePointer()); System.out.println("显示该文件的字节总长度:"+raf.length()); //进行读取操作,一次性将所有内容读取出来 raf.seek(0);//将指针的指向移动到开头 byte[] byte3=new byte[(int)raf.length()]; raf.read(byte3);//将文件的内容读到字节数组中 System.out.println(Arrays.toString(byte3)); String string3=new String(byte3,"gbk"); System.out.println(string3); } }
把代码粘上来
发源码来看看,照你直接说的意思应该是没有问题的