Главная страница

АБОБА. Справочник по программированию на Java Методическое пособие


Скачать 242.41 Kb.
НазваниеСправочник по программированию на Java Методическое пособие
АнкорАБОБА
Дата20.02.2022
Размер242.41 Kb.
Формат файлаdocx
Имя файла12642_java_method_1.docx
ТипСправочник
#368066
страница63 из 67
1   ...   59   60   61   62   63   64   65   66   67

Чтение и запись файлов


Java предоставляет множество классов и методов, которые позволяют вам читать и записывать файлы. В Java все файлы байт-ориентированы, и Java предоставляет методы для чтения и записи байтов в файл. Однако Java позволяет также поместить байт-ориентированные файловые потоки в оболочки символ-ориентированных объектов. Такая техника описана во второй части книги. В настоящей же главе рассматриваются только основы файлового ввода-вывода.

Два из наиболее часто используемых потоковых класса — это FileInputStream и FileOutputStream, которые создают байтовые потоки, связанные с файлами. Чтобы открыть файл, вы просто создаете объект одного из этих классов, указав имя файла в качестве аргумента конструктора. Хотя оба класса имеют и дополнительные переопределенные конструкторы, мы будем использовать только следующие из них:

FileInputStream(String fileName) throws FileNotFoundException

FileOutputStream(String fileName) throws FileNotFoundException

Здесь filename — имя файла, который вы хотите открыть. Когда вы создаете входной поток, то если файл не существовал, возбуждается исключение FileNotFoundException. Для выходных потоков, если файл не может быть создан, также возбуждается исключение FileNotFoundException. Когда выходной файл открыт, любой ранее существовавший файл с тем же именем уничтожается.

Когда вы завершаете работу с файлом, вы должны закрыть его вызовом метода close(). Этот метод определен и в FileInputStream и в FileOutputStream, как показано ниже:

void close() throws IOException

Чтобы читать файл, вы можете применять версию метода read(), который определен в FileInputStream. Та, что мы будем использовать, выглядит так:

int read() throws IOException

Всякий раз, когда вызывается этот метод, он читает единственный байт из файла и возвращает его как целое число. read() возвращает -1, когда достигнут конец файла. Метод может возбуждать исключение IOException.

В следующей программе read() используется для ввода и отображения содержимого текстового файла, имя которого специфицировано в аргументе командной строки. Обратите внимание на блок try/catch, обрабатывающий две ошибки, которые могут возникнуть при работе программы — когда указанный файл не найден, либо когда пользователь забыл указать имя файла. Вы можете применять тот же подход всякий раз при использовании аргументов командной строки. Другие возможные исключения ввода-вывода просто передаются в main(), что вполне приемлемо для такого простого примера.

Однако, работая с файлами, часто вы пожелаете обработать самостоятельно все исключения ввода-вывода.

/* Отображение текстового файла.

Чтобы использовать эту программу, укажите

имя файла, который хотите просмотреть.

Например, чтобы просмотреть файл TEST.TXT,

используйте следующую командную строку:

java ShowFile TEST.TXT

*/

import java.io.*;

class ShowFile {

public static void main(String args[])

throws IOException

{

int i;

FileInputStream fin;

try {

fin = new FileInputStream(args[0]);

} catch(FileNotFoundException e) {

System.out.println("Файл не найден");

return;

} catch(ArrayIndexOutOfBoundsException e) {

System.out.println("Использование: ShowFile Файл");

return;

}

BookNew_JAVA-7.indb 320 02.06.2007 1:07:08

Глава 13. Ввод-вывод, аплеты и другие темы 321

// читать символы до получения символа EOF (конец файла)

do {

i = fin.read();

if(i != -1) System.out.print((char) i);

} while(i != -1);

fin.close();

}}

Для записи в файл вы будете использовать метод write(), определенный в FileOutputStream. Его простейшая форма выглядит так:

void write(int byteval) throws IOException

Этот метод пишет в файл байт, переданный в byteval. Хотя byteval объявлен как целочисленный, в файл записываются только его младшие восемь бит. Если при записи произойдет ошибка, возбуждается исключение IOException. В следующем примере write() используется для копирования текстового файла:

/* Копирование текстового файла.

Для использования этой программы укажите

имена исходного и целевого файлов.

Например, чтобы скопировать файл FIRST.TXT в файл

SECOND.TXT, используйте следующую командную строку:

java CopyFile FIRST.TXT SECOND.TXT

*/

import java.io.*;

class CopyFile {

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

{

int i;

FileInputStream fin;

FileOutputStream fout;

try {

// открыть входной файл

try {

fin = new FileInputStream(args[0]);

} catch(FileNotFoundException e) {

System.out.println("Входной файл не найден");

return;

}

// открыть выходной файл

try {

fout = new FileOutputStream(args[1]);

} catch(FileNotFoundException e) {

System.out.println("Ошибка открытия выходного файла");

return;

}

} catch(ArrayIndexOutOfBoundsException e) {

System.out.println("Использование: CopyFile Исходный Целевой");

return;

}

// Копировать файл

try {

do {

i = fin.read();

BookNew_JAVA-7.indb 321 02.06.2007 1:07:09

322 Часть I. Язык Java

if(i != -1) fout.write(i);

} while(i != -1);

} catch(IOException e) {

System.out.println("Ошибка файла");

}

fin.close();

fout.close();

}}

Обратите внимание на способ обработки потенциальных ошибок ввода-вывода в этой программе. В отличие от некоторых других языков программирования, включая C и C++, которые используют коды ошибок для обнаружения файловых ошибок, Java применяет свой механизм исключений. Это не только делает управление файлами понятнее, но также позволяет Java просто отличать условие достижения конца файла от файловых ошибок во время ввода. В C/C++ многие функции ввода возвращают одно и то же значение, когда происходит ошибка и когда достигается конец файла.
1   ...   59   60   61   62   63   64   65   66   67


написать администратору сайта