www.sansuresansur.org
Ana sayfa

Java'da Dosya Adı Değiştirme



Ortalama puan: 3.5 (2 oy)

adının anlamı ne

Bazen çok fazla benzer dosya adını değiştirmek zorunda kalıyorum. Örneğin dijital fotoğraf makinasıyla çektiğimiz fotoğrafların adı genelde hep standart oluyor ve bilgisayara aktarırken eskilerle aynı klasör içine koyamıyoruz. Dosya adları hep Resim 001.jpg ya da benzeri bir şey oluyor. Bu tip durumlarda dosya adı değiştirmeye yarayan bir uygulama yazmak, özellikle çok fazla dosyanın adının değiştirilmesi gereken durumlarda yararlı oluyor.

Önce olmazsa olmaz IO paketimizi import ediyoruz.
import java.io.*;

Ardından uygulama için rutin sınıf işlemleri yapıyoruz. Burada sınıfın bir örneğini oluşturmayı gerekli görmedim, direk main metodundan işlemleri yapabiliriz. Bir de unutmadan belirteyim, işlemler sırasında dosya adı bulunamayabilir, üzerinde çalışmak istediğimiz dosya orada aslında hiç bulunmuyor olabilir. Ve benzeri nedenlerden ötürü IOException fırlayabilir. O yüzden sınıfın başında bunu belirtmekte fayda var;
public class Degistir{
public static void main(String[] args) throws IOException{
}
}

Önce tek dosya adı değiştirme nasıl olur, ondan bahsedelim. Kullanmak istediğimiz dosyalar için File nesneleri oluşturmamız gerekiyor. Elimizde bulunan ve adını değiştirmek istediğimiz dosyanın adı eski.txt olsun. Yenisinin adı da yeni.txt olsun. File nesnesini oluştururken vereceğimiz dosya adı eğer zaten var olan bir dosyaya aitse, nesne üzerinde yapılan işlemler o dosya üzerinde yapılır. Yoksa o adla yeni bir dosya oluşturulur. Biz elimizdeki dosyaların adını değiştireceğimiz için nesneye o dosyanın adını (ve gerekiyorsa yolunu) parametre olarak göndereceğiz. Daha sonra da bu nesnenin adını renameTo() metoduyla değiştireceğiz;

File dosya=new File("eski.txt");
dosya.renameTo("yeni.txt")

Basitlik açısından, yapacağımız işlemlerin bulunduğu dosyalar, uygulama dosyamız olan Degistir.java ile aynı yerde bulunsun. Bu klasör içinde kaç tane dosya olduğunu bilmemiz gerekiyor. Bunun için benim aklıma şöyle bir yöntem geldi;
"" parametresiyle yeni bir File nesnesi oluşturup bunun tam adres yolunu alırım. Daha sonra da bu yolun içindeki dosyaları bir File[] dizisi içine koyarım. Ama klasör içindeki sadece belli bir şekilde başlayan dosyaları değiştireceğim için bir FileFilter kullanmam gerekir. Dolayısıyla önce dosyalarımın nasıl başladığını belirteyim. Bu örneğe uygun olarak Resim 001.jpg dosyalarını Bayram.jpg'ye dönüştürmek istiyorum. Bunları belirteyim, ardından dosya işlemlerini ve filtrelemeyi yapayım;
String baslangic="Resim "
String yeniBaslangic="Bayram";
File d=new File(new File("").getAbsolutePath());
FileFilter filtre=new FileFilter(File gelenDosya){
public boolean accept(File filtrelenecek){
if(filtrelenecek.getName().startsWith(baslangic)){
return true;
} else {
return false;
}
}
}
File[] dosyalar=d.listFiles(filtre)

Böylece dosyalar dizisinin içinde bana lazım olan dosyaları koymuş oldum. Yalnız bir not: baslangic adıyla tanımladığımız String değeri FileFilter içinde değişememesi gerekiyor. O yüzden başta bunu final olarak tanımlamamız gerekiyor.

Bundan sonra dosyalar dizisini de bir for döngüsüne koyarak ad değiştirmeyi yapabilirim;
for(int i=0;i < dosyalar.length;i++){
dosyalar[i].renameTo(new File(yeniBaslangic+i+".jpg"));
}

Uygulamayı çalıştırdığımızda dosya adları değişmiş olur. Eğer bir değişiklik olmazsa, throws IOException kısmını siler, yerine try {} catch(Exception ex)(ex.printStackTrace();) bloğunu koyarız ve hatanın yerini tespit ederiz.

Kodun tamamını da yazalım ve Degistir.java adıyla kaydedelim;
import java.io.*;
public class Degistir{
public static void main(String[] args) throws IOException{
final String baslangic="Bayram";
String yeniBaslangic="kek";
File d=new File(new File("").getAbsolutePath());
System.out.println(new File("").getAbsolutePath());
FileFilter filtre=new FileFilter() {
public boolean accept(File filtrelenecek){
if(filtrelenecek.getName().startsWith(baslangic))
return true;
else
return false;
}
};
File[] dosyalar=d.listFiles(filtre);
for(int i=0;i<dosyalar.length;i++){
dosyalar[i].renameTo(new File(yeniBaslangic+i+".jpg"));
}
}
}

Programımız hayırlı olsun.

Yeni yorum gönder

Bu alanın içeriği gizli tutulacak ve açıkta gösterilmeyecektir.
  • Web sayfası ve e-posta adresleri otomatik olarak bağlantıya çevrilir.
  • Kullanabileceğiniz HTML kodları: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><b><i>
  • Satır ve paragraflar otomatik olarak bölünürler.
  • Textual smileys will be replaced with graphical ones.

Biçimleme seçenekleri hakkında daha fazla bilgi