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` 来写入和读取包含中文字符的对象到文件中,并尝试解决乱码问题。下面将详细分析这段代码: 1. **创建文件对象**: ```java File f = new File("k:\\c.txt"); `...
### 使用RandomAccessFile流将一个文本文件读出并写入到另一个文件中的知识点解析 在Java编程语言中,`RandomAccessFile`类提供了一种非常灵活的方式来读取和写入文件。它支持随机访问,意味着我们可以直接跳转到...
如果要处理字符数据,特别是包含多字节编码(如UTF-8)的文本,可能会遇到乱码问题。对于这种情况,建议使用InputStreamReader和OutputStreamWriter配合BufferedReader和BufferedWriter,它们可以处理字符编码转换。...
花1K内存实现高效I-O的RandomAccessFile类 自己搜搜这个关键字. 我主要是用来优化Android上多线程断点下载的写文件效率 RandomAccessFile是操作硬盘的,比操作内存的数据慢了几百万倍, 所有有人做出优化,我特上传...
在Java编程语言中,`FileChannel`和`RandomAccessFile`是两个重要的I/O类,它们主要用于处理磁盘文件。这两个类提供了高级的文件操作功能,例如高效的数据传输和随机访问文件内容。在这个主题中,我们将深入探讨这两...
【基于RandomAccessFile文件分类的小程序】是一款实用的工具,其主要功能是对指定文件夹内的文件进行分类。...通过学习和使用这个小程序,我们可以提升对Java高级特性的掌握,以及在实际项目中解决复杂问题的能力。
在使用`RandomAccessFile`向文件写入中文时,可能会遇到乱码问题。这是因为Java内部使用Unicode编码,而文件系统通常使用其他编码格式(如GBK)。因此,在进行写入操作时,需要确保正确的编码转换。 #### 三、写入...
因为使用其他文件流修改文件时是整体的替换,导致SVN上传上去后是整个文件都修改了,所以需要增量修改,这个demo是使用RandomAccessFile增量修改,只修改指定的行,很实用
NULL 博文链接:https://chaoyi.iteye.com/blog/2083498
Java中的`RandomAccessFile`类是一个强大的文件操作工具,它允许程序员以随机访问模式读取和写入文件。与标准的`FileInputStream`和`FileOutputStream`不同,`RandomAccessFile`不仅支持顺序读写,还能直接跳转到...
6. 文件读写完成以后一定要关闭:在使用RandomAccessFile类时,读写完成以后一定要关闭文件,以免出现问题。 在RafDemo.java中,我们使用RandomAccessFile类来演示文件的读写操作。首先,我们创建了一个文件,并...
在学习Java基础的过程中,理解并掌握`RandomAccessFile`的用法对于提升编程技能和解决实际问题具有重要意义。通过观看"Java基础第16天-01.RandomAccessFile.avi"的视频教程,你将能够更深入地了解和运用这一特性。
最近在用java的IO包下面的RandomAccessFile类读写中文文件时遇到了乱码问题,解决不了。于是索性自己写个类,可以进行中文文件读写而不乱码。 压缩包里提供了.jar包和源代码。1.2版本解决了前面版本读取文件速度慢的...
Java中的`RandomAccessFile`是一个非常重要的类,它允许我们以随机访问模式读写文件,这意味着我们可以自由地在文件的任何位置进行读写操作,而不仅仅是顺序地从头到尾处理文件。这个类提供了对文件内容进行高效定位...
Java 使用 RandomAccessFile 类基于指针读写文件实例代码 Java 中的 RandomAccessFile 类是一种基于指针操作的文件读写方式,能够实现对文件的随机访问。该类不同于其他许多基于流方式读写文件的类,它直接继承自 ...
花1K内存实现高效IO的RandomAccessFile类.doc
Java的`RandomAccessFile`类是Java I/O流体系中的一种特殊类型,它允许程序员以随机访问模式读取和写入文件。与传统的输入/输出流不同,`RandomAccessFile`可以任意位置开始读写,这使得它在处理大文件或需要定位到...
File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型字节流、打印流、对象序列化流、字节数组流)、字符流(缓冲字符流、文件字符流、转换流、格式化输出流、字符数组流) 这份代码源码...
`RandomAccessFile`是Java中的一个类,位于`java.io`包中,它提供了对文件进行读写的能力,并且可以随机地定位到文件中的任何位置进行数据的读取或写入,这使得在处理大型文件时更为灵活高效。与`FileInputStream`和...