`
dacoolbaby
  • 浏览: 1265916 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用RandomAccessFile类-解决readLine乱码问题

    博客分类:
  • Java
阅读更多

RandomAccessFile

RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。

RandomAccessFile不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系毫不相干,甚至不使用InputStream和OutputStream类中已经存在的任何功能;它是一个完全独立的类,所有方法(绝大多数都只属于它自己)都是从零开始写的。这可能是因为RandomAccessFile能在文件里面前后移动,所以它的行为与其它的I/O类有些根本性的不同。总而言之,它是一个直接继承Object的,独立的类。

基本上,RandomAccessFile的工作方式是,把DataInputStream和DataOutputStream结合起来,再加上它自己的一些方法,比如定位用的getFilePointer( ),在文件里移动用的seek( ),以及判断文件大小的length( )、skipBytes()跳过多少字节数。此外,它的构造函数还要一个表示以只读方式("r"),还是以读写方式("rw")打开文件的参数 (和C的fopen( )一模一样)。它不支持只写文件。

本人计划用RandomAccessFile类进行文件的读取,用于查找索引中记录的文件的位置。

但是遇到乱码的问题,后来解决了。

代码如下:

import java.io.*;

public class RandomFileAccessTest {

    public static void main(String[] args) throws IOException {
        long finishedFileSize = 1000 ;
        
        File newFile = new File("d:\\result.txt");
        //文件大小
        long fileSize = newFile.length();
        
        RandomAccessFile raf = new RandomAccessFile(newFile, "r");
        raf.seek(finishedFileSize);
        int offset = 500 ;
        //无乱码
//        byte[] b = new byte[1024];
//        raf.read(b, 0, offset);
//        System.out.println(new String(b));
        
        //返回1500,当前指针的位置。 1500 = 1000 + 500 = finishedFileSize + offset
//        System.out.println(raf.getFilePointer());
        
        //乱码 -- 解决了
        //在Windows下raf会默认编码成8859_1
        while(raf.read()!=-1){
            System.out.println(new String(raf.readLine().getBytes("8859_1"),"gbk"));
            System.out.println("current pointer offset:"+raf.getFilePointer());
        }
        
        raf.close();
    }

}

 

分享到:
评论

相关推荐

    RandomAccessFile 解决乱码

    给定的示例代码展示了如何使用 `RandomAccessFile` 来写入和读取包含中文字符的对象到文件中,并尝试解决乱码问题。下面将详细分析这段代码: 1. **创建文件对象**: ```java File f = new File("k:\\c.txt"); `...

    使用RandomAccessFile流将一个文本文件读出,并导致写入到另一个文件当中。

    ### 使用RandomAccessFile流将一个文本文件读出并写入到另一个文件中的知识点解析 在Java编程语言中,`RandomAccessFile`类提供了一种非常灵活的方式来读取和写入文件。它支持随机访问,意味着我们可以直接跳转到...

    RandomAccessFile类的用法.doc

    如果要处理字符数据,特别是包含多字节编码(如UTF-8)的文本,可能会遇到乱码问题。对于这种情况,建议使用InputStreamReader和OutputStreamWriter配合BufferedReader和BufferedWriter,它们可以处理字符编码转换。...

    花1K内存实现高效I-O的RandomAccessFile类

    花1K内存实现高效I-O的RandomAccessFile类 自己搜搜这个关键字. 我主要是用来优化Android上多线程断点下载的写文件效率 RandomAccessFile是操作硬盘的,比操作内存的数据慢了几百万倍, 所有有人做出优化,我特上传...

    【IT十八掌徐培成】Java基础第26天-06.FileChannel-RandomAccessFile-CopyFile.zip

    在Java编程语言中,`FileChannel`和`RandomAccessFile`是两个重要的I/O类,它们主要用于处理磁盘文件。这两个类提供了高级的文件操作功能,例如高效的数据传输和随机访问文件内容。在这个主题中,我们将深入探讨这两...

    基于RandomAccessFile文件分类的小程序

    【基于RandomAccessFile文件分类的小程序】是一款实用的工具,其主要功能是对指定文件夹内的文件进行分类。...通过学习和使用这个小程序,我们可以提升对Java高级特性的掌握,以及在实际项目中解决复杂问题的能力。

    RandomAccessFile向文件中写入中文

    在使用`RandomAccessFile`向文件写入中文时,可能会遇到乱码问题。这是因为Java内部使用Unicode编码,而文件系统通常使用其他编码格式(如GBK)。因此,在进行写入操作时,需要确保正确的编码转换。 #### 三、写入...

    使用RandomAccessFile递归修改文件

    因为使用其他文件流修改文件时是整体的替换,导致SVN上传上去后是整个文件都修改了,所以需要增量修改,这个demo是使用RandomAccessFile增量修改,只修改指定的行,很实用

    RandomAccessFile类

    NULL 博文链接:https://chaoyi.iteye.com/blog/2083498

    Java使用RandomAccessFile类对文件进行读写

    Java中的`RandomAccessFile`类是一个强大的文件操作工具,它允许程序员以随机访问模式读取和写入文件。与标准的`FileInputStream`和`FileOutputStream`不同,`RandomAccessFile`不仅支持顺序读写,还能直接跳转到...

    Java中IO流 RandomAccessFile类实例详解

    6. 文件读写完成以后一定要关闭:在使用RandomAccessFile类时,读写完成以后一定要关闭文件,以免出现问题。 在RafDemo.java中,我们使用RandomAccessFile类来演示文件的读写操作。首先,我们创建了一个文件,并...

    【IT十八掌徐培成】Java基础第16天-01.RandomAccessFile.zip

    在学习Java基础的过程中,理解并掌握`RandomAccessFile`的用法对于提升编程技能和解决实际问题具有重要意义。通过观看"Java基础第16天-01.RandomAccessFile.avi"的视频教程,你将能够更深入地了解和运用这一特性。

    java中文文件读写API及源码 V1.3

    最近在用java的IO包下面的RandomAccessFile类读写中文文件时遇到了乱码问题,解决不了。于是索性自己写个类,可以进行中文文件读写而不乱码。 压缩包里提供了.jar包和源代码。1.2版本解决了前面版本读取文件速度慢的...

    JAVA随机存储流(RandomAccessFile)的应用

    Java中的`RandomAccessFile`是一个非常重要的类,它允许我们以随机访问模式读写文件,这意味着我们可以自由地在文件的任何位置进行读写操作,而不仅仅是顺序地从头到尾处理文件。这个类提供了对文件内容进行高效定位...

    java使用RandomAccessFile类基于指针读写文件实例代码

    Java 使用 RandomAccessFile 类基于指针读写文件实例代码 Java 中的 RandomAccessFile 类是一种基于指针操作的文件读写方式,能够实现对文件的随机访问。该类不同于其他许多基于流方式读写文件的类,它直接继承自 ...

    花1K内存实现高效IO的RandomAccessFile类.doc

    花1K内存实现高效IO的RandomAccessFile类.doc

    RandomAccessFile的用法

    Java的`RandomAccessFile`类是Java I/O流体系中的一种特殊类型,它允许程序员以随机访问模式读取和写入文件。与传统的输入/输出流不同,`RandomAccessFile`可以任意位置开始读写,这使得它在处理大文件或需要定位到...

    Java的IO流讲解代码: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型

    File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型字节流、打印流、对象序列化流、字节数组流)、字符流(缓冲字符流、文件字符流、转换流、格式化输出流、字符数组流) 这份代码源码...

    体会RandomAccessFile

    `RandomAccessFile`是Java中的一个类,位于`java.io`包中,它提供了对文件进行读写的能力,并且可以随机地定位到文件中的任何位置进行数据的读取或写入,这使得在处理大型文件时更为灵活高效。与`FileInputStream`和...

Global site tag (gtag.js) - Google Analytics