我想写一个读取txt小说的工具,大家知道这种文件一般比较大,我首先使用每次读取一行的方式,这样虽不会出乱码,但是速度慢的惊人(自己测试是这样,不知道是否有误),就改用了构造成一个RandomAccessFile,每次读取1024个字节,速度虽然提升了,但是这样会造成局部乱码,设置文字错误的情况。不知道各位大虾有什么好的建议

解决方案 »

  1.   

    用BufferedReader 的 readLine()
            FileInputStream fis=new FileInputStream("1.txt");
            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(isr);
             
            br.readLine();   --具体就不写啦带缓冲区的,应该会快一些,而且是字符流,中文应该也不会乱码
      

  2.   

    用BufferedReader再1K读.
    BufferedReader br = null;

    try {
    br = new BufferedReader(new InputStreamReader(
    new FileInputStream("src/com/classloader/dynamic/MyDynamic.java")));
    char[] buffer = new char[1024]; int n ;
    while((n=br.read(buffer))!=-1){
     System.out.print(new String(buffer,0,n));
    }
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } finally{
    if(br!=null)
    try {
    br.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
      

  3.   

    要想更快可以看看 java.nio这个包的知识 
    讲的是更高效的读取数据
      

  4.   

    下面是我项目中读写文件用到的代码!
    可以解决中文乱码问题!
    希望对你有用InputStreamReader read = null;
    BufferedReader br = null;
    OutputStreamWriter writer = null;
    BufferedWriter bw = null;
    try {
    File inputPath = new File(读取文件的路径);
    read = new InputStreamReader(new FileInputStream(inputPath),"UTF-8");
    br = new BufferedReader(read);                File outputPath = new File(写出文件的路径);
    writer = new OutputStreamWriter(new FileOutputStreamoutputPath),"UTF-8");
    bw = new BufferedWriter(writer);
                    while循环读写文件就不写了
               } catch (Exception e) {
    e.printStackTrace();
    } finally {
    try {
    br.close();
    bw.close();
    read.close();
    writer.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
      

  5.   

    RandomAccessFile有两个个方法readUTF()和writeUTF(),可以使用utf-8读写入文件!
    你试试看能不能解决中文
      

  6.   

     建议楼主readline,这样比较好,不容易出错,还可以错误追踪,可能是你的特殊符号出现的乱码