BİLGİ SAYAMIYORUM beta

Java ile bir dosyanın uzantısı nasıl öğrenilir ya da adresinden bir dosyanın sadece ismi nasıl çekilir?

0

Bu işi ekstra kütüphane kullanmadan çözmenin tek yolu sondaki noktanın varlığına göre bir parser (ayrıştırıcı) yazmaktan geçiyor sanırım. Diyelim ki aşağıdaki gibi bulduğunuz bir adresteki dosyanın uzantısını öğrenmek istiyorsunuz:

public class NeDosyasi{
     public static void main(String[] args){
          private String dosyaYolu = "/bilgisayamiyorum.com/assets/favicon.ico";
          String uzanti = "";

          int n = dosyaYolu.lastIndexOf('.');
          if (n > 0) {
               uzanti = dosyaYolu.substring(i+1);
          }

          System.out.print(uzanti);
     }
}

Bu NeDosyasi sınıfı içersindeki işlemleri ihtiyacınız olabilecek durumlara göre değiştirmelisiniz, zira hemen fark etmeseniz de istisna durumlarda direk patlar. Mesela ismi nokta ile başlayan dosyalar için, n sayısı ile ilgili yaptığımız kontrolün "n >= 0" ya da "n != -1" şeklinde değiştirilmesi lazım. Örnek olarak: .ssh, .subversion, .htaccess

Başka bir sıkıntı ise dosyaYolu içinde yolladığınız yolun en son kısmındaki isimde nokta olmaması ama / işaretinin sol tarafındaki isimlerde nokta olması. Bu da yukarıdaki işlemleri şu şekilde değiştirmeniz gerekiyor demek oluyor:

public class NeDosyasi{
     public static void main(String[] args){
          private String dosyaYolu = "/bilgisayamiyorum.com/assets/favicon";
          String uzanti = "";

          int n = dosyaYolu.lastIndexOf('.');
          int d = Math.max(dosyaYolu.lastIndexOf('/'), dosyaYolu.lastIndexOf('\\'));
          if (n > d) {
               uzanti = dosyaYolu.substring(i+1);
          }

          System.out.print(uzanti);
     }
}

Tabii ki bunları yapmak yerine kolayca Apache Commons IO kütüphanesini kullanabilirsiniz. Onda ise şu satırlardaki şekiller ile yapılabileceği üzere işiniz çok kolay:

String dosyaUzanti = FilenameUtils.getExtension(dosyaYolu);
String dosyaUzanti2 = FilenameUtils.getExtension("geronimo.html");

Şuradan Commons IO kütüphanesini indirebilirsiniz. Herhangi bir projeye dışarıdan kütüphane eklemeye alışmalısınız, bunun için olmasa da başka zaman işinize yaracaktır, bu sebeple, kullandığınız IDE ye göre (Eclipse, Netbeans vb.) bunun nasıl yapılacağını izlemenizi tavsiye ederim. Örnek olarak: Adding Libraries to Java Project in Eclipse IDE

Elinizde adresi/yolu olan bir dosyanın sadece ismini çekmek isterseniz ise direk getName fonksiyonunu kullanabilirsiniz:

File dosya = new File("/bilgisayamiyorum.com/assets/howtowitchcraft.pdf");
System.out.println(dosya.getName());

Java7 sonrasında Path i de kullanabiliyormuşsunuz, şöyle:

Path yol = Paths.get("C:\\Dosya\\gizlidosya\\howtofly.pdf");
String dosya = yol.getFileName().toString();

Tabii bu işlemi Apache Commons ile yapmak da mümkün:

String isim = FilenameUtils.getName(dosyaYolu);

BENZER 7

Kimse etkileşime girmemiş

ETİKETLER