Урок 4. RandomAccessFile и его возможности – Devcolibri – Android для начинающих

Урок 4. RandomAccessFile и его возможности

Мы продолжаем серию уроков пакета IO, и в этом уроке мы познакомимся с более интересным классом данного пакета, который называется RandomAccessFile.

RandomAccessFile – класс пакета Java IO API, он позволяет перемещаться по файлу, читать из него или писать в него, как вам будет угодно. Вы также сможете заменить существующие части файла, речь идет о обновлении содержимого файла, а точней о обновлении фрагмента файла. Это невозможно сделать с помощью FileInputStream или FileOutputStream, но RandomAccessFile даст вам эту возможность.

Шаг 1

Как во всех уроках, первый шаг – создаем проект. И в нем один Main класс, в нем мы будем тестировать возможности RandomAccessFile. Но мы не будим писать сразу в main метод код, а создадим новый класс в котором опишем нужный нам функционал, и уже в методе main мы будем его проверять.

Структура проекта простая:

Как видите у нас есть два класса, где класс Main имеет метод main(String[] args) в котором мы и будем проверять роботу методов класса WorkWithFile.

Шаг 2

Открываем класс WorkWithFile и пишем следующее содержимое:

import java.io.IOException;
import java.io.RandomAccessFile;

public class WorkWithFile {

    private String path;

    // Экземпляр класса который обеспечит возможность 
    // работать с файлом
    private RandomAccessFile file;

    // говорим конструктору проинициализировать путь к файлу
    public WorkWithFile(String path) {
        this.path = path;
    }

    // метод демонстрирует переход на указанный символ
    public long goTo(int num) throws IOException {
        // инициализируем класс RandomAccessFile 
        // в параметры передаем путь к файлу 
        // и модификатор который говорит, что файл откроется только для чтения
        file = new RandomAccessFile(path, "r");

        // переходим на num символ
        file.seek(num);

        // получаем текущее состояние курсора в файле
        long pointer = file.getFilePointer();
        file.close();

        return pointer;
    }

    // этот метод читает файл и выводит его содержимое
    public String read() throws IOException {
        file = new RandomAccessFile(path, "r");
        String res = "";
        int b = file.read();
        // побитово читаем символы и плюсуем их в строку
        while(b != -1){
            res = res + (char)b;
            b = file.read();
        }
        file.close();

        return res;
    }

    // читаем файл с определенного символа
    public String readFrom(int numberSymbol) throws IOException {
        // открываем файл для чтения
        file = new RandomAccessFile(path, "r");
        String res = "";

        // ставим указатель на нужный вам символ
        file.seek(numberSymbol);
        int b = file.read();

        // побитово читаем и добавляем символы в строку
        while(b != -1){
            res = res + (char)b;

            b = file.read();
        }
        file.close();

        return res;
    }

    // запись в файл
    public void write(String st) throws IOException {
        // открываем файл для записи
        // для этого указываем модификатор rw (read & write)
        // что позволит открыть файл и записать его
        file = new RandomAccessFile(path, "rw");

        // записываем строку переведенную в биты
        file.write(st.getBytes());

        // закрываем файл, после чего данные записываемые данные попадут в файл
        file.close();
    }

}

Шаг 3

Теперь в классе Main в методе main() проверим работу наших методов класса WorkWithFile:

import java.io.IOException;

public class Main {

    // создаем экземпляр класса что мы создали
    private static WorkWithFile worker;

    public static void main(String[] args) throws IOException {
        // инициализируем класс передавая в него путь к файлу
        // так как мой файл лежит в корне проекта, то я просто указываю его имя
        worker = new WorkWithFile("testfile.txt");

        // пишем передаваемый текст в файл
        worker.write("Give me a break from your take and your take. \n" +
                "Come on and give me a break,\n" +
                "what do you want from me?\n" +
                "Feeding the rich with that son of a bitch.\n" +
                "Well that son of a bitch,\n" +
                "he looks just like me!\n" +
                "Yeah, yeah");

        // переходим на указанный символ в файле
        System.out.println(worker.goTo(100));
        System.out.println("*******");

        // читаем весь файл
        System.out.println(worker.read());
        System.out.println("*******");

        // читаем файл с указанного символа
        System.out.println(worker.readFrom(105));
    }
}

Шаг 4

Запускаем и смотрим что выведет в консоль:

100
*******
Give me a break from your take and your take. 
Come on and give me a break,
what do you want from me?
Feeding the rich with that son of a bitch.
Well that son of a bitch,
he looks just like me!
Yeah, yeah, yeah
*******
ding the rich with that son of a bitch.
Well that son of a bitch,
he looks just like me!
Yeah, yeah, yeah

ПОХОЖИЕ ПУБЛИКАЦИИ

    None Found

57812
18/09/2013

4 комментариев к статье "Урок 4. RandomAccessFile и его возможности"

Добавить комментарий

Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.

Я ознакомлен(а)