]]>
ваш баннер
]]>

Создание приложения для поиска файлов на Java

18 августа, 2007

Тестирование и использование класса поиска

Класс для поиска мы написали. Теперь нужно проверить, как он работает. Для этого, создадим папку с такой структурой:

    folderForTests
          folder1
                emptyFolder
                file11.txt
          folder2
                file22.html
                file21.txt
          file1.txt
          file2.txt

И напишем тесты для проверки работы каждого метода. Тесты создадим с использованием библиотеки JUnit. Описывать использование этой библиотеки я не буду. Это не тема данной статьи, к тому же, подробные инструкции можно найти на официальном сайте этой библиотеки.

Сами тесты достаточно простые. Идея такая, мы используем наш класс для анализа созданной папки, и проверяем результаты.

Полностью класс тестов можно посмотреть в исходниках, а здесь я покажу только его фрагмент:

Code (java)
  1. /*Задаем папку для поиска*/
  2. String startPath = "folderForTests";
  3. /*Создаем экземпляр класса поиска*/
  4. FileFinder finder = new FileFinder();
  5. /*Начинаем поиск*/
  6. List result = finder.findAll(startPath);
  7. /*Проверяем общее количество найденных объектов*/
  8. assertEquals(result.size(), 8);
  9. /*Проверяем общий размер всех файлов в папке*/
  10. assertEquals(finder.getDirectorySize(), 209);
  11. /*Проверяем количество найденных папок*/
  12. assertEquals(finder.getDirectoriesNumber(), 3);
  13. /*Проверяем количество найденных файлов*/
  14. assertEquals(finder.getFilesNumber(), 5);

Использование нашего класса в программе ничуть не сложнее, чем использование любого другого класса. В первую очередь, импортируем класс.
import searchtools.FileFinder;
Затем создаем экземпляр класса, и вызываем нужный метод. Например,

Code (java)
  1. FileFinder finder = new FileFinder();
  2. try {
  3.     List res = finder.findAll("имя_папки");
  4. }
  5. catch(Exception err) {
  6.     System.out.println(err.getMessage());
  7. }

Посмотреть свойства найденных объектов тоже не сложно (мы имеем список с объектами типа File, и можем использовать любой метод этого класса).

В качестве примера напишем консольную программу, которая выводит список найденных файлов с указанием их размера. Папка для поиска и регулярные выражения задаются в параметрах командной строки.

Code (java)
  1. import java.io.File;
  2. import java.util.List;
  3. import searchtools.FileFinder;
  4.  
  5. /**
  6. * Программа поиска файлов
  7. * Параметры поиска:
  8. * 1 - начальная директория (папка) поиска
  9. * 2 - регулярное выражение (необязательный)
  10. * Например:
  11. * java -jar FileSearchProgram.jar C:junit3.8.1
  12. * java -jar FileSearchProgram.jar C:junit3.8.1 .*.html
  13. *
  14. * @author Стаценко Владимир
  15. * http://www.vova-prog.narod.ru
  16. */
  17. public class Main {
  18.  
  19.     /** Создает экземпляры Main */
  20.     public Main() {
  21.     }
  22.  
  23.     /**
  24.      * @param args[0] начальная директория (папка) поиска
  25.      * @param args[1] регулярное выражение
  26.      */
  27.     public static void main(String[] args) {
  28.         //проверяем, заданы ли параметры поиска
  29.         if(args != null && args.length >= 1) {
  30.             FileFinder finder = new FileFinder();
  31.             try {
  32.                 List searchRes = null;
  33.                 //если задано регулярное выражение…
  34.                 if(args.length == 2) {
  35.                     //…ищем только соответствующие объекты
  36.                     searchRes = finder.findAll(args[0], args[1]);
  37.                 }
  38.                 //если нет…
  39.                 else {
  40.                     //…ищем все подряд
  41.                     searchRes = finder.findAll(args[0]);
  42.                 }
  43.                 //выводим результаты
  44.                 for(int i = 0; i < searchRes.size(); i++) {
  45.                     File curObject = (File)searchRes.get(i);
  46.                     if(curObject.isDirectory()) {
  47.                         System.out.println(
  48.                                 curObject.getName() + " (папка)");
  49.                     }
  50.                     else {
  51.                         System.out.println(curObject.getName()
  52.                                 + " (" + curObject.length() + " байт)");
  53.                     }
  54.                 }
  55.                 System.out.println("Найдено " + finder.getFilesNumber() +
  56.                         " файлов и " + finder.getDirectoriesNumber() +
  57.                         " папок.");
  58.             }
  59.             catch(Exception err) {
  60.                 System.out.println(err.getMessage());
  61.             }
  62.         }
  63.         else {
  64.             System.out.println("Не заданы параметры поиска.n" +
  65.                     "начальная_папка <регулярное_выражение>n");
  66.         }
  67.     }
  68. }

Скачать:

исходники класса поиска с тестами (FileFinding_src.zip - 12 кБ)

исходники программы поиска (FileSearchProgram_src.zip - 9 кБ)

консольную программу поиска (fileSearchProgram.zip - 4 кБ)

Страницы: 1 2

Понравилась статья? Подпишитесь на продолжение rss link !

]]>

Добавьте эту страницу в google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

]]>

Опубликовано в Java

]]>

Комментарии (2)

Вы можете отслеживать обсуждение записи с помощью RSS 2.0 rss link

Вы также можете оставить комментарий, или трекбек с Вашего сайта.

  1. Андрей 07.11.2007 в 14:20 (Ответить)

    Спасибо! Этот класс мне очень помог! Есть одно замечание:
    в методе search
    в строке File[] list = topDirectory.listFiles();
    list может принять значение null (если доступ к папке запрещен) и далее программа генерирует ошибку, поэтому после указанной строки необходимо, судя по всему, вставить проверку на null: что то вроде этого: if (list == null){
    list = new File[]{};
    }

  2. Владимир 07.11.2007 в 21:27 (Ответить)

    Согласен. Действительно, пропустил этот момент.
    Просто тестировал только под Windows и с админовскими правами. Поэтому закрытых папок не было в принципе.
    По-моему, в такой ситуации лучше просто прервать выполнение:
    if (list == null) {
    return;
    }

    Ну и, конечно, можно генерировать исключение (все зависит от требований к программе)
    if (list == null) {
    throw new Exception("....");
    }

Оставить комментарий

Введите ваш комментарий

* - обязательные для заполнения поля

Quicktags:

]]>