2011-12-06 14 views
17

Uzantısı olmadan bir File nesnesinin adını almaya çalışıyorum, ör. dosya adı "vegetation.txt" olduğunda "bitki örtüsü" almak. Bu kodu uygulamak denedi:Java'da uzantısı olmadan File nesnesinin adı nasıl alınır?

openFile = fileChooser.getSelectedFile(); 
String[] tokens = openFile.getName().split("."); 
String name = tokens[0]; 

Ne yazık ki, bir null nesnesi döndürür. Sadece String nesnesini tanımlamada bir sorun var, çünkü getName() yöntemi doğru çalışıyor; Bana dosyanın uzantısıyla birlikte adını veriyor.

Herhangi bir fikrin var mı?

cevap

36

son nokta aramak ve alt dizeyi elde etmektir, bu deneyin:

String name = file.getName(); 
int pos = name.lastIndexOf("."); 
if (pos > 0) { 
    name = name.substring(0, pos); 
} 

(Bu varyasyon kokan t Eğer bu durumda boş olması dize istiyorum., >= 0 için > 0 değiştirmek ".txt" gibi bir girdi dosya için boş bir dize ile bırakıyoruz.)


sen 01 yerini alabilir Kodunuzu daha okunabilir hale getirdiğini düşünüyorsanız, koşullu ifade kullanarak bir atamaya sahipifadesi; Örneğin, Steven'ın cevabına bakınız. (Ben öyle düşünmüyorum ... ama görüş meselesi olduğunu.)


tartışmalı bir başkası yazılı ve test ettiğini bir uygulama kullanmak için daha iyi bir fikirdir. Apache FilenameUtils iyi bir seçimdir; Ayrıca, @ slachnick'in cevabı ve ayrıca bağlantılı Q& sayılı A.

+0

Sorunumu çözdüğünüz için çok teşekkürler :) – MichalB

4

Son "" dizininden önce kesmeyi tercih ederim. dosya adı olmak. Bu şekilde bir dosya adı: hello.test.txt

sadece hello.test yani

Sen de hiçbir uzantısıdır, orada işlemek gerekir
int pos = filename.lastIndexOf("."); 
String justName = pos > 0 ? filename.substring(0, pos) : filename; 

.

2

split("\\.");'u deneyebilirsiniz. Yani, temelde .'dan regex'teki tüm karakterler gibi ele alındığı için kaçmaktır.

2

...

1) Sadece kullanarak "" Bölünecek bir argüman olarak istemediğiniz bir Rejex olarak yorumlanıyor. Gerçek bir nokta istiyorsun. Bu yüzden kaçmak zorundasın ...

openFile.getName().split("\\."); 

2) Herhangi bir dosyayı birden fazla nokta ile yanlış bir şekilde ayrıştıracaksınız. Bunu yapmanın en iyi yolu, bu kendinizi uygulamak istiyorsanız ...

int pos = openFile.getName().lastIndexOf("."); 
if(pos != -1) { 
    String name = openFile.getName().substring(0, pos); 
} 
17

Bu kodu kendiniz yazmak istemiyorsanız, Apache'nin FilenameUtils numarasını kullanabilirsiniz.

FilenameUtils.getBaseName(openFile.getName()); 

Bu, dosya adını ve uzantısını eksi olarak dosya adını döndürür.

İlgili konular