Читайте также: |
|
В качестве параметра конструктору передается имя файла, который должен быть открыт. Если указанный файл не существует, генерируется исключение FileNotFoundException.
Для чтения данных из файла служит метод read(). Ниже приведен вариант этого метода, который мы будем использовать далее.
Int read() throws IOException
При каждом вызове метод read() читает байт из файла и возвращает его как целочисленное значение. При достижении конца файла данный метод возвращает значение -1. При возникновении ошибки метод генерирует исключение IOException. Как видите, данный вариант read() выполняет те же действия, что и одноименный метод, предназначенный для вывода на консоль.
Закончив работу с файлом, надо закрыть его с помощью метода close (), который выглядит следующим образом:
Void close() throws IOException
При закрытии файла освобождаются связанные с ним системные ресурсы; их можно использовать для работы с другим файлом.
Ниже приведен код программы, в которой метод read () используется для ввода одержимого текстового файла. Имя файла задается посредством параметра командной строки. Полученные данные выводятся на экран. Обратите внимание на то, что ошибки ввода-вывода обрабатываются с помощью блока try/catch.
/* Отображениетекстовогофайла.
Привызоведаннойпрограммынадоуказатьимяфайла, содержимоекотороговыхотитепросмотреть. Например, длятого, чтобывывестинаэкранфайл TEST.TXT, надоиспользоватьследующуюкоманднуюстроку:
java ShowFile TEST.TXT
*/
import java.io.*;
class ShowFile
{
public static void main(String args[])
{
int i;
FileInputStream fin;
// В первуюочередьнадоубедиться, чтофайлбылуказан
if (args.length!= 1) {
System. out. println("Usage: ShowFile File");
return;
}
Try
{
fin = new FileInputStream(args[0]);
}
catch (FileNotFoundException exc)
{
System. out. println("File Not Found");
return;
}
// Открытиефайла
Try
{
// Содержимоефайлачитаетсядотехпор, пока
// невстретитсязначение EOF read bytes until EOF is encountered
Do
{
// Чтениеизфайла
i = fin.read();
if (i!= -1) System. out. print((char) i);
// Если i равно -1, этоозначает, чтобылдостигнутконецфайла
} while (i!= -1);
}
catch (IOException exc)
{
System. out. println("Error reading file.");
}
Try
{
// Закрытиефайла
fin.close();
}
catch (IOException exc)
{
System. out. println("Error closing file.");
}
}
}
Запись в файл
Чтобы открыть файл для вывода, надо создать объект FileOutputStream. Ниже приведены два наиболее часто используемых конструктора.
FileOutputStream(String fileName) throws FileNotFoundException
FileOutputStream(String fileName, boolean append) throws FileNotFoundException
Если файл не может быть создан, возникает исключение FileNotFoundЕxception. Первый вариант конструктора, открывая файл, удаляет ранее существующий файл с таким именем. Второй вариант отличается наличием параметра append. Если значение данного параметра равно true, записываемые данные добавляются к концу файла. В противном случае информация в файле разрушается. Для того чтобы записать данные в файл, надо использовать метод write(). наиболее простая форма этого метода приведена ниже.
void write(int byteval) throws IOException
Данный метод записывает в поток байтовое значение, указанное в качестве параметра. Несмотря на то, что параметр объявлен как int, учитываются только младшие 8 битов. Если в процессе записи возникнет ошибка, будет сгенерировано исключение IOException.
Как вы уже знаете, при выводе в файл информация не записывается сразу же на физическое устройство. Вместо этого она помещается в буфер. После того как в буфере накопится некоторый заранее заданный объем данных, происходит реальная запись их на носитель. Такой подход увеличивает эффективность работы системы. Как вы знаете, дисковое пространство разбито на секторы размером 128 байтов или более. Запись осуществляется по секторам, а для этого выходные данные буферизуются. Если же вы хотите, чтобы запись на устройство произошла до заполнения буфера, вам надо вызвать метод flush(), представленный ниже.
void flush() throws IOException
В случае ошибки генерируется исключение. После окончания работы с файлом его надо закрыть с помощью метода close(). Заголовок данного метода выглядит следующим образом:
void close() throws IOException
При закрытии файла освобождаются связанные с ним системные ресурсы; их можно использовать для работы с другим файлом. Процедура закрытия также гарантирует, что данные, оставшиеся в буфере, будут записаны на диск.
Следующий фрагмент кода осуществляет копирование текстового файла; имена исходного и целевого файла указываются в командной строке:
/* Копированиетекстовогофайла.
Привызоведаннойпрограммынадоуказатьимяисходного
и целевогофайлов. Например,
чтобыскопироватьфайл FIRST.TXT в файл SECOND.TXT,
надоиспользоватьследующуюкоманднуюстроку:
java CopyFile FIRST.TXT SECOND.TXT
*/
import java.io.*;
class CopyFile
{
public static void main(String args[])
{
int i;
FileInputStream fin;
FileOutputStream fout;
// В первуюочередьнадоубедиться, что
// обафайлабылиуказаны
if (args.length!=2)
{
System. out. println("Usage: CopyFile From To");
return;
}
// Открытиеисходногофайла
Try
{
fin = new FileInputStream(args[0]);
}
catch (FileNotFoundException exc)
{
System. out. println("Input File Not Found");
return;
}
// Открытиецелевогофайла
Try
{
fout = new FileOutputStream(args[1]);
}
catch (FileNotFoundException exc)
{
System. out. println("Error Opening Output File");
// Закрытиеисходногофайла
Try
{
fin.close();
}
catch (IOException exc2)
{
System. out. println("Error closing input file.");
}
return;
}
// Копированиефайла
Try
{
Do
{
i = fin.read();
// Чтениебайтаизодногофайла
// и записьего в другойфайл
if (i!= -1) fout.write(i);
} while (i!= -1);
}
catch (IOException exc)
{
System. out. println("File Error");
}
Try
{
fin.close();
}
catch (IOException exc)
{
System. out. println("Error closing input file.");
}
Try
{
fout.close();
}
catch (IOException exc)
{
System. out. println("Error closing output file.");
}
}
}
Вопросы для текущего контроля
1. Какое значение возвращает метод read() при достижении конца файла?
2. Какие действия выполняет метод flush()?
Дата добавления: 2015-07-10; просмотров: 149 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Использование байтовых потоков | | | Чтение и запись двоичных данных |