Основы программирования на Java - страница 25

Шрифт
Интервал

стр.

11. ввод/вывод

Обобщенное понятие источника ввода относится к различным способам получения информации: к чтению дискового файла, символов с клавиатуры либо получению данных из сети. Аналогично под обобщенным понятием вывода также могут пониматься дисковые файлы, сетевое соединение и т. п. Эти абстракции дают удобную возможность для работы с вводом-выводом (I/O), не требуя при этом, чтобы каждая часть вашего кода понимала разницу между, скажем, клавиатурой и сетью. В Java эта абстракция называется потоком (stream) и реализована в нескольких классах пакета java.io. Ввод инкапсулирован в классе InputStream, вывод — в OutputStream. В Java есть несколько специализаций этих абстрактных классов, учитывающих различия при работе с дисковыми файлами, сетевыми соединениями и даже с буферами в памяти.


11.1. Работа с файлами

File — единственный класс в java.io, который работает непосредственно с дисковыми файлами. Хотя на использование файлов в апплетах наложены жесткие ограничения, файлы по-прежнему остаются основными ресурсами для постоянного хранения и совместного использования информации. Каталог в Java трактуется как обычный файл, но с дополнительным свойством — списком имен файлов, который можно просмотреть с помощью метода list.

Для определения стандартных свойств файла в классе File есть много разных методов. Однако класс File несимметричен. Есть много методов, позволяющих узнать свойства объекта, но соответствующие функции для изменения этих свойств отсутствуют. В очередном примере используются различные методы, позволяющие получить характеристики файла:

>import java.io.File;

>class FileTest {

>static void p(String s) {

>System.out.println(s);

>}

>public static void main(String args[]) {

>File fl = new File("/java/COP YRIGHT");

>р("Имя файла:" + fl .getName());

>р("Путь:" + fl.getPath());

>р("Полный путь:" + fl.getAbsolutePath());

>р("Родительский каталог:" + fl.getParent());

>p(fl.exists() ? "существует" : "не существует");

>p(fl.canWrite() ? "можно записывать" : "нельзя записывать");

>p(fl.canRead() ? "можно читать" : "нельзя читать");

>p("is" + ("Директория? "+fl ,isDirectory() ? "да": " нет");

>p(fl.isFile() ? "обычный файл" : "не обычный файл");

>р("Последняя модификация файла:" + fl. lastModified());

>р("Размер файла:" + fl.length() + " Bytes");

>}

>}

При запуске этой программы вы получите:

>Имя файла: COPYRIGHT

>Путь: /java/COPYRIGHT

>Полный путь:/Java/COPYRIGHT

>Родительский каталог:/java

>существует

>можно записывать

>можно читать

>Директория? нет

>обычный файл

>is absolute

>Последняя модификация файла:812465204000

>Размер файла:695 Bytes

Существует также несколько сервисных методов, использование которых ограничено обычными файлами (их нельзя применять к каталогам). Метод renameTo(File dest) переименовывает файл (нельзя переместить файл в другой каталог). Метод delete уничтожает дисковый файл. Этот метод может удалять только обычные файлы, каталог, даже пустой, с его помощью удалить не удаётся.

11.2. Каталоги

Каталоги — это объекты класса File, в которых содержится список других файлов и каталогов. Если File ссылается на каталог, его метод isDirectoiy возвращает значение true. В этом случае вы можете вызвать метод list и извлечь содержащиеся в объекте имена файлов и каталогов. В очередном примере показано, как с помощью метода list можно просмотреть содержимое каталога.

>import j ava.io.File;

>class DirList {

>public static void main(String args[]) {

>String dirname = "/java"; // имя каталога

>File fl = new File(dirname);

>if (fLisDirectory()) {

>// является ли fl каталогом

>System.out.println("Directory of' + dirname);

>String s[]=fl.list();

>for (int i=0; i < s.length; i++) {

>File f = new File(dirname + "/" + s[i]);

>if(fisDiiectory())

>{

>// является ли f каталогом

>System.out.println(s[i] +” is a directory"):

>}

>else {

>System.out.println(s[i] + " is a file");

>}

}

>}

>else {

>System.out.println(dirname + " is not a directory");

>}

}

>}

В процессе работы эта программа вывела содержимое каталога /java моего персонального компьютера в следующем виде:

>С:\> java DirList

>Directory of /java

>bin is a directory COPYRIGHT is a file

>README is a file


стр.

Похожие книги