четвер, 29 грудня 2011 р.

Читання каталогу на Java

Прийшлось вирішувати наступну задачу. Необхідно було за допомогою програми на java збити дані з файлів в каталозі в один. Крім власне читання з файлів і запису, виникла необхідність прочитати вміст каталогу і одержати список файлів.
Читання вмісту каталогу
Для роботи з файлами і каталогами (папками) слугує клас File. Каталог по суті представляє той же File-об'єкт, який містить список інших файлів і каталогів. Перевірка такого об’єкта в java виконується за допомогою методу isDirectory().
  

import java.io.File; //імпортуємо відповідний клас

**
* @author volodimirg
*/
public class AllInFileTest {
 public static void main(String[] args) {
  String dirname="D:\\install\\tmp"; // наша робочий каталог
  File ourFile=new File(dirname); // створюємо File-об'єкт

  if (ourFile.isDirectory()){
  System.out.println("Каталог: "+dirname);
  String files[]=ourFile.list(); //одержуємо і заносимо список файлів в масив
  for (int i=0;i<files.length;i++){
   File f =new File (dirname+"/"+files[i]); //беремо для перевірки кожен File-об'єкт в каталозі
  if (f.isDirectory()){
    System.out.println(files[i]+" - це каталог");
  }else{
  System.out.println(files[i]+" - це файл");
  }
 }
 }
 }
}

Каталог: D:\\install\\tmp
1-49і.csv - це файл
1-2і.csv - це файл
1-3і.csv - це файл
1-5і.csv - це файл
1-7і.csv - це файл
1-9і.csv - це файл
1-11і.csv - це файл
1-13і.csv - це файл
1-15і.csv - це файл
1-17і.csv - це файл
1-19і.csv - це файл
1-21і.csv - це файл
1-23і.csv - це файл
1-25і.csv - це файл
1-27і.csv - це файл
1-29і.csv - це файл
1-31і.csv - це файл
1-33і.csv - це файл
1-35і.BAK - це файл
1-47і.csv - це файл
1-45і.csv - це файл
1-43і.csv - це файл
1-41і.csv - це файл
1-39і.csv - це файл
1-37і.csv - це файл
1-51і.csv - це файл
1stTree Lypa40rЖовтня.xlsx - це файл
1-1і.csv - це файл
Other - це каталог
My - це каталог
Проте для виконання поставленої задачі необхідно перебирати файли у посортованому вигляді.
Сортування списку файлів
Порившись в інтернеті можна знайти поради використовувати класи з колекцій пакету java.util і зокрема Comparator для сортування файлів у списку. Хоч це не складний спосіб, та й лінь згадувати і розбиратись, тим більше, що знайшов простіший спосіб. У тому ж пакеті міститься клас Array, який надає ряд зручних методів для роботи з масивами. Зокрема і метод для сортування масиву sort().
Таким чином наша програма потребує лише додавання двох рядків:
import java.util.*; //підключаємо відповідний клас
….
Arrays.sort(files); //сортуємо масив, результат повертається у тому ж масиві
Повний текст програми наступний.
import java.io.File; //імпортуємо клас File
import java.util.Arrays; // імпортуємо клас Arrays
/**
* @author volodimirg
*/
public class AllInFileTest {
public static void main(String[] args) {
 String dirname=" D:\\install\\tmp "; // наш робочий каталог
 File ourFile=new File(dirname); // створюємо File-об'єкт

 if (ourFile.isDirectory()){
   System.out.println("Каталог: "+dirname);
   String files[]=ourFile.list(); //одержуємо і заносимо список файлів в масив
   Arrays.sort(files); // сортуємо масив, результат у тому ж масиві
   for (int i=0;i<files.length;i++){
     File f =new File (dirname+"/"+files[i]); //беремо для перевірки кожен File-об'єкт в каталозі
     if (f.isDirectory()){
       System.out.println(files[i]+" - це каталог");
     }else{
     System.out.println(files[i]+" - це файл");
  }
 }
}
}
}