Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: А.В. Фролов, Г.В. Фролов - Microsoft Visual J++
<<-[Весь Текст]
Страница: из 275
 <<-
 
 определена, вызывается второй вариант этого же метода:
else
  dirlist = fdir.list(new MaskFilter(sMask));
   Здесь в качестве параметра методу list мы передаем вновь созданный объект 
класса MaskFilter (фильтр), передав соответствующему конструктору строку маски.
   В любом случае метод list заполняет полученным списком массив строк dirlist. 
Содержимое этого массива перебирается в цикле:
for (int i = 0; i < dirlist.length; i++)
{
  File f = new File(sDirPath + "\\" + dirlist[i]);
  if(f.isFile())
    System.out.println(dirlist[i].toLowerCase());
  else
    System.out.println(dirlist[i]);
}
   Для каждого элемента массива мы создаем объект класса File, передавая 
конструктору путь каталога, добавив к нему разделитель и строку элемента 
массива. Затем если данная строка соответсвует файлу, а не каталогу, имя 
выводится строчными буквами. Для преобразования мы вызываем метод toLowerCase, 
определенный в классе String.
   Рассмотрим теперь класс MaskFilter, предназначенный для фильтрации имен, 
которые метод list возвращает вызвавшему его методу.
   Класс MaskFilter определен следующим образом:
class MaskFilter implements FilenameFilter
{
  . . .
}
   Как видно из определения, этот класс реализует интерфейс FilenameFilter. В 
рамках интерфейса FilenameFilter вам нужно переопределить метод accept, который 
проверяет, подходит ли имя файла критерию отбора, заданному маской, и в 
зависимости от этого возвращает либо значение true (если подходит), либо false 
(если не подходит).
   Маска передается конструктору класса MaskFilter, преобразуется им в 
прописные буквы и сохраняется в поле sNameMask для использования в процессе 
проверки методом accept:
MaskFilter(String sMask)
{
  sNameMask = sMask.toUpperCase();
}
   Что же касается метода accept, то он выглядит достаточно просто:
public boolean accept(File dir, String name)
{
  if(sNameMask.equals("*"))
    return true;
  return (name.indexOf(sNameMask) != -1);
}
   В качестве первого параметра этому методу передается путь к каталогу, а в 
качестве второго - имя файла. Метод accept вызывается для каждого файла и 
каталога, расположенного в каталоге dir.
   Наша реализация этого метода вначале проверяет маску. Если маска задана как 
строка “*”, подходит любое имя, поэтому метод accept всегда возвращает значение 
true.
   Если же используются другие маски, то наш метод выполняет ее поиск в строке 
имени с помощью метода indexOf. Если строка маски найдена как подстрока имени 
файла или каталога, такое имя нам подходит и метод accept возвращает значение 
true. В противном случае возвращается значение false.
   Произвольный доступ к файлам
   В ряде случаев, например, при создании системы управления базой данных, 
требуется обеспечить произвольный доступ к файлу. Рассмотренные нами ранее 
потоки ввода и вывода пригодны лишь для последовательного доступа, так как в 
соответствующих классах нет средств позиционирования внутри файла.
   Между тем библиотека классов Java содержит класс RandomAccessFile, который 
предназначен специально для организации прямого доступа к файлам как для чтения,
 так и для записи.
   В классе RandomAccessFile определено два конструктора, прототипы которых 
показаны ниже:
public RandomAccessFile(String name, String mode);	
public RandomAccessFile(File file, String mode);
   Первый из них позволяет указывать имя файла, и режим mode, в котором 
открывается файл. Второй конструктор вместо имени предполагает использование 
объекта класса File.
   Если файл открывается только для чтения, вы должны передать конструктору 
текстовую строку режима "r".  Если же файл открывается и для чтения, и для 
записи, конструктору передается строка "rw".
   Позиционирование внутри файла обеспечивается методом seek, в качестве 
параметра pos которому передается абсолютное смещение файла:
public void seek(long pos);
   После вызова этого метода текущая позиция в файле устанавливается в 
соответствии со значением параметра pos.
   В любой момент времени вы можете определить текущую позицию внутри файла, 
вызвав метод getFilePointer:
public long getFilePointer();
   Еще один мето
 
<<-[Весь Текст]
Страница: из 275
 <<-