Философия Java3
вернуться

Эккель Брюс

Шрифт:

//: io/UsingRandomAccessFile.java import java.io.*,

public class UsingRandomAccessFile { static String file = "rtest.dat". static void displayО throws IOException {

RandomAccessFile rf = new RandomAccessFile(file, "r"). for(int i =0. i <7, i++) System.out println(

"Значение " + i + " " + rf .readDoubleO); System.out.pri ntln(rf.readUTF); rf.closeO;

}

public static void main(String[] args) throws IOException {

RandomAccessFile rf = new RandomAccessFile(file, "rw"). for(int i = 0; i < 7; i++)

rf writeDouble(i*1.414); rf writeUTFCThe end of the file"), rf closeO. displayO,

rf = new RandomAccessFile(file, "rw"); rf.seek(5*8); rf writeDouble(47.0001), rf.closeO; displayO;

}

} /* Output; Значение 0; 0.0 Значение 1. 1.414 Значение 2; 2.828 Значение 3- 4 242 Значение 4; 5.656 Значение 5; 7.069999999999999 Значение 6. 8.484 The end of the file Значение 0; 0.0 Значение 1; 1.414 Значение 2; 2 828 Значение 3; 4.242 Значение 4; 5.656 Значение 5; 47.0001 Значение 6; 8.484 The end of the file *///;-

Метод display открывает файл и выводит семь значений в формате double. Метод main создает файл, открывает и модифицирует его. Поскольку значение double всегда занимает 8 байт, для перехода к пятому числу методу seek следует передать смещение 5*8.

Как упоминалось ранее, класс RandomAccessFile отделен от остальных классов иерархии ввода/вывода, если не считать того факта, что он реализует интерфейсы Datalnput и DataOutput. Приходится предполагать, что для этого RandomAccessFile правильно организована буферизация, потому что включить ее в программе не удастся.

Некоторая свобода выбора предоставляется только со вторым аргументом конструктора: RandomAccessFile может открываться в режиме чтения ("г") или чтения/записи ("rw").

Также стоит рассмотреть возможность употребления вместо класса RandomAccessFile механизма отображаемых в память файлов.

Каналы

В этой главе были коротко упомянуты классы каналов PipedlnputStream, Piped-OutputStream, PipedReader и PipedWriter. Это не значит, что они редко используются или не слишком полезны, просто их смысл и действие нельзя донести до понимания до тех пор, пока не объяснена многозадачность: каналы предназначены для связи между отдельными потоками программы. Они будут описаны позднее.

Средства чтения и записи файлов

Очень часто в программировании производится такая цепочка действий: файл считывается в память, там он изменяется, а потом снова записывается на диск. Одна из проблем при работе с библиотекой ввода/вывода Java состоит в том, что для выполнения таких достаточно типичных операций вам придется написать некоторое количество кода — не существует вспомогательных функций, на которые можно переложить такую деятельность. Что еще хуже, с надстройками вообще трудно запомнить, как открываются файлы. Поэтому имеет смысл добавить в вашу библиотеку вспомогательные классы, которые легко сделают нужное за вас. В Java SE5 у PrintWriter появился вспомогательный конструктор, позволяющий легко открыть текстовый файл для чтения. Тем не менее существует много других типичных задач, часто выполняемых в повседневной работе, и было бы разумно избавиться от лишнего кода, связанного с их выполнением.

Ниже показан такой класс Text File с набором статических методов, построчно считывающих и записывающих текстовые файлы. Вдобавок можно создать экземпляр класса Text File, который будет хранить содержимое файла в списке ArrayList (и функциональность списка ArrayList станет доступной при работе, с содержимым файла):

//• net/mi ndvi ew/uti1/TextFi1e java

// Статические функции для построчного считывания и записи

// текстовых файлов,- а также манипуляции файлом как списком ArrayList

package net mindview util;

import java io.*.

import java util *.

public class TextFile extends ArrayList<String> { // Чтение файла как одной строки; public static String read(String fileName) {

StringBuilder sb = new StringBuilderO; try {

BufferedReader in= new BufferedReader(new FileReader(

продолжение &

new Fi1е(fi 1eName).getAbsoluteFi1e));

try {

String s,

while((s = in readLineO) != null) { sb append(s); sb.append("\n");

}

} finally {

in.closeO;

}

} catch(IOException e) {

throw new RuntimeException(e);

}

return sb toStringO;

}

// Запись файла за один вызов метода: public static void write(String fileName, String text) { try {

PrintWriter out = new PrintWriter(

new FileCfileName).getAbsoluteFileO);

try {

out.print(text); } finally {

out. closeO;

}

} catch(IOException e) {

throw new RuntimeException(e);

  • Читать дальше
  • 1
  • ...
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • ...

Private-Bookers - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • help@private-bookers.win

Подпишитесь на рассылку: