Класс RandomAccessFile позволяет получить доступ к файлу с произвольным доступом. Сам он не является потоком, так как не наследуется от какого-либо потокового класса, но реализует интерфейсы DataInput и DataOutput. Методы этих интерфейсов позволяют читать и писать разнотипные данные в файл. Также мы можем управлять позицией каретки - перемещать её или пропускать определенное число байт от текущей позиции. Пример:
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javainputoutput;
/** * * @author martyshov */ import java.io.*; import java.nio.*; import java.util.*;
public class JavaInputOutput {
/** * @param args the command line arguments */ public static void main(String[] args) throws IOException {
RandomAccessFile rf = null; try { rf = new RandomAccessFile("C:/test.txt", "rw"); String str = "0123456789"; rf.write(str.getBytes());
} catch (IOException e) { System.err.println(e.getLocalizedMessage()); } finally { if (rf != null) { rf.close(); } }
RandomAccessFile rf2 = null; try { rf2 = new RandomAccessFile("C:/test.txt", "rw"); System.out.println("Пропускаем 5 байтов в файле"); rf2.skipBytes(5); System.out.println((char) rf2.readByte()); System.out.println((char) rf2.readByte()); System.out.println((char) rf2.readByte());
System.out.println("Ставим на 5 позицию в файле"); rf2.seek(5); System.out.println((char) rf2.readByte()); System.out.println((char) rf2.readByte()); System.out.println((char) rf2.readByte()); System.out.println((char) rf2.readByte());
//устанавливаем новую длину файла в байтах и переводим каретку на начало файла rf2.setLength(7); rf2.seek(0); for (int i = 0; i < rf2.length(); i++) { System.out.print((char) rf2.readByte()); } System.out.println();
//устанавливаем новую длину файла в байтах и переводим каретку на начало файла rf2.setLength(3); rf2.seek(0); for (int i = 0; i < rf2.length(); i++) { System.out.print((char) rf2.readByte()); } System.out.println();
} catch (IOException e) { System.err.println(e.getLocalizedMessage()); } finally { if (rf2 != null) { rf2.close(); } }
} }
|