İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

File Class'ı

File Class'ının İşlevi

Bir dosya hakkında bilgi almak için File class'ı kullanılır. Ancak bu class bir dosyanın içerisindeki veriyi temsil etmemektedir. Dosyalar içerisindeki verilerle çalışmak için FileInputStream, FileOutputStream, FileReader ve FileWriter gibi classlar kullanılır.

File class'ı aynı zamanda directory (folder)'ları da temsil eder. Zaten aslında her directory diskte kullanıcının değiştiremediği ancak dolaylı olarak üzerinde çalışabildiği bir dosyadır.

Bir dosya hakkında bilgileri ekrana basan bir program yazalım.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import java.io.*;
  2 import java.util.*;
  3 public class FileInspector{
  4   public static void main(String[] args){
  5     String filename="c:\\myfolder\\myfile.ext";
  6     File file=new File(filename);
  7     System.out.println("Directory?"+file.isDirectory());
  8     System.out.println("Last Modified :"+new Date(file.lastModified()));
  9     System.out.println("Exists?:"+file.exists()); 
 10     System.out.println("Size :"+file.length()); 
 11     System.out.println("Hidden?:"+file.isHidden());
 12   }
 13         
 14 }

File class'ı bir file hakkında çeşitli bilgileri öğrenmek için kullanılır. Bunlar işletim sisteminin bir dosya hakkında tuttuğu kjayıtlardan gelmektedir. Dosyanın içeriğiyle ilgili bilgiler değildir.

Directory İşlemleri

Bir dizin altındaki dosya ve klasörleri bulmak için File class'ının list() ve listFiles() methodları kullanılır. Bu ikisinden list(), dosya ve klasörlerin adlarını bir dizi halinde döndürür. Oysa listFiles() dosya ve klasörlere ait File nesnelerini döndürür. Eğer bir klasörün altındakilerle ismini almak dışpında başka işlemlerde yapılacaksa bu ikincisini kullanmak daha faydalı olur.

Bir klasörün altındaki dosya ve klasörleri listelemek için aşağıdaki gibi bir kod yazılır.

File dir=new File("c:\\myfolder");
File[] list=dir.listFiles();        
for(int i=0;i<list.length;i++){
	System.out.println(list[i].getName());
}  	

Bir klasörün altındakileri listelerken bir filtre vermek, yani sadece belli özelliklere sahip olanları listelemek için FilenameFilter ve FileFilter interfaceleri kullanılır. Filtreleme kriteri bu interface'lerin accept() methodunda belirlenir. Bir file kritere uyuyorsa true uymuyorsa false döndürülür. FilenameFilter, klasör ve dosya ismi ile filtreleme yapmaya olanak tanırken, FileFilter ise File nesnesiyle filtreleme yapılmasını sağlar. Bu filtreleri implement eden class'lar (genellikle inner class'lar) list() ve listFiles() methodlarına parametre olarak verilir.

Örnek olarak, bir klasörün altında klasörleri değil sadece normal dosyaları listeleyen bir kod parçası yazalım :

FileFilter filter=new FileFilter(){
	public boolean accept(File file){
		return file.isFile();
	}            
};
File dir=new File("c:\\myfolder");
File[] normals=folder.listFiles(filter);
for(int i=0;i<normals.length;i++){
	System.out.println(normals[i].getName());
}

Burada accept method'unda normal file olup olmadığı kontrol edilmektedir. FileFilter instance'ı listFiles()'a parametre olarak verilince listelenen dosyalarda sadece kritere uyanlar bulunur. Listelemeyle ilgili örnek kodun tamamı :

Göster Gizle Kopar Satır Gizle Satır Göster
  1 package com.godoro.samples.io;
  2 import java.io.*;
  3 public class DirectoryTest{
  4   public static void listTest(File dir){
  5     File[] list=dir.listFiles();        
  6     for(int i=0;i<list.length;i++){
  7   System.out.println(list[i].getName());
  8     }  
  9   }
 10   public static void filterTest(File folder){
 11     FileFilter filter=new FileFilter(){
 12       public boolean accept(File file){
 13   return file.isFile();
 14       }            
 15     };
 16     File[] normals=folder.listFiles(filter);
 17     for(int i=0;i<normals.length;i++){
 18   System.out.println(normals[i].getName());
 19     }
 20   }
 21     public static void main(String[] args){
 22         File dir=new File("C:\\");     
 23         //listTest(dir);
 24   filterTest(dir);
 25         
 26     }
 27 }

Bir directory altındaki dosyaları derinlemesine (recursive) listeleyen, yani bir klasörün altındaki klasörlere de bakan giren bir program yazalım.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import java.io.*;
  2 public  class DirectoryLister{
  3   static public void walk(File directory){
  4     File[] files=directory.listFiles();
  5     for(int i=0;i<files.length;i++){
  6       File file=files[i];
  7       boolean parent=file.isDirectory();
  8       if(parent){
  9         walk(file);
 10       }else{
 11         System.out.print(file.getAbsolutePath() );
 12         System.out.println(" : "+file.length());
 13       }
 14     }
 15   }
 16   public static void main(String[] args){
 17     String name="c:\\myfolder";
 18     File directory=new File(name);
 19     DirectoryLister.walk(directory);
 20   }
 21 }

Bu örnekte walk() methodu recursive (yineleyen) bir şekilde kendisini çağırmaktadır.

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır