Java RandomAccessFile示例
Java RandomAccessFile提供了将数据读取和写入文件的功能。
RandomAccessFile与文件一起使用,作为存储在文件系统中的大字节数组和一个游标,通过该游标我们可以移动文件指针的位置。
Java RandomAccessFile
RandomAccessFile类是Java IO的一部分。
在Java中创建RandomAccessFile实例时,我们需要提供打开文件的模式。
例如,要以只读模式打开文件,我们必须使用" r",而对于读写操作,我们必须使用" rw"。
使用文件指针,我们可以在任何位置从随机访问文件读取或者写入数据。
要获取当前文件指针,可以调用getFilePointer()
方法,并设置文件指针索引,可以调用seek(int i)
方法。
如果我们在已经存在数据的任何索引处写入数据,它将覆盖它。
Java RandomAccessFile 读示例
我们可以使用Java中的RandomAccessFile从文件读取字节数组。
下面是使用RandomAccessFile读取文件的伪代码。
RandomAccessFile raf = new RandomAccessFile("file.txt", "r"); raf.seek(1); byte[] bytes = new byte[5]; raf.read(bytes); raf.close(); System.out.println(new String(bytes));
在第一行中,我们将以只读模式为文件创建RandomAccessFile实例。
然后在第二行中,将文件指针移动到索引1。
我们创建了一个长度为5的字节数组,因此在调用read(bytes)方法时,会将5个字节从文件读取到字节数组。
最后,我们将关闭RandomAccessFile资源,并将字节数组打印到控制台。
Java RandomAccessFile 写示例
这是一个简单的示例,显示了如何使用Java中的RandomAccessFile将数据写入文件。
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw"); raf.seek(5); raf.write("Data".getBytes()); raf.close();
由于RandomAccessFile将文件视为字节数组,因此写操作可以覆盖数据以及可以附加到文件。
这完全取决于文件指针的位置。
如果将指针移到文件长度之外,然后调用写操作,则文件中将写入垃圾数据。
因此,在使用写操作时应注意这一点。
RandomAccessFile 追加示例
我们需要做的就是确保文件指针位于文件末尾以追加到文件中。
下面是使用RandomAccessFile追加到文件的代码。
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw"); raf.seek(raf.length()); raf.write("Data".getBytes()); raf.close();
Java RandomAccessFile示例
这是具有不同读写操作的完整Java RandomAccessFile示例。
package com.theitroad.files; import java.io.IOException; import java.io.RandomAccessFile; public class RandomAccessFileExample { public static void main(String[] args) { try { //file content is "ABCDEFGH" String filePath = "/Users/hyman/Downloads/source.txt"; System.out.println(new String(readCharsFromFile(filePath, 1, 5))); writeData(filePath, "Data", 5); //now file content is "ABCDEData" appendData(filePath, "hyman"); //now file content is "ABCDEDatahyman" } catch (IOException e) { e.printStackTrace(); } } private static void appendData(String filePath, String data) throws IOException { RandomAccessFile raFile = new RandomAccessFile(filePath, "rw"); raFile.seek(raFile.length()); System.out.println("current pointer = "+raFile.getFilePointer()); raFile.write(data.getBytes()); raFile.close(); } private static void writeData(String filePath, String data, int seek) throws IOException { RandomAccessFile file = new RandomAccessFile(filePath, "rw"); file.seek(seek); file.write(data.getBytes()); file.close(); } private static byte[] readCharsFromFile(String filePath, int seek, int chars) throws IOException { RandomAccessFile file = new RandomAccessFile(filePath, "r"); file.seek(seek); byte[] bytes = new byte[chars]; file.read(bytes); file.close(); return bytes; } }