2012-04-26 15 views
14

Tam bir dosya yoluna sahibim ve dosya adını almak istiyorum.Sistem dosyası ayırıcı simgesini kullanarak dosya adlarını bölme

Aşağıdaki talimat kullanıyorum:

String[] splittedFileName = fileName.split(System.getProperty("file.separator")); 
String simpleFileName = splittedFileName[splittedFileName.length-1]; 

Fakat Windows üzerinde o verir:

java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 
\ 
^ 

bu özel durum önlemek miyim? Bunu yapmanın daha iyi bir yolu var mı?

cevap

34

Sorun, düzenli bir ifade içinde backslash olarak kullanmak için \'dan çıkmak zorunda olmasıdır. Bir splitting API which doesn't use regular expressions kullanabilir veya Pattern.quote ilk kullanmalıdır ya:

// Alternative: use Pattern.quote(File.separator) 
String pattern = Pattern.quote(System.getProperty("file.separator")); 
String[] splittedFileName = fileName.split(pattern); 

Hatta daha da iyisi, bunun için File API kullanmak: Bir dosya adı yazdığınızda, System.getProperty("file.separator") kullanmalıdır

File file = new File(fileName); 
String simpleFileName = file.getName(); 
3

.

bir dosya adı okunan

, muhtemelen eğik çizgi veya dosya ayırıcı olarak geriye eğik çizgi ya olabilir.

Aşağıdaki denemek isteyebilirsiniz: Herşeyden

fileName = fileName.replace("\\", "/"); 
String[] splittedFileName = fileName.split("/")); 
String simpleFileName = splittedFileName[splittedFileName.length-1]; 
+0

Teşekkürler @Gilbert Le Blanc, iyi bir kod parçası! basit ve harika çalışıyor! –

0

Birincisi, bu özel sorunu için bir regex yerine java.util.File sınıfını kullanarak öneriyoruz. söyleniyor

, sen yaşamaya devam edip sorunun kök ters eğik çizgi karakteri '\' Java normal ifadelerde bir kaçış dizisi anlamına olmasıdır. Neler oluyor regex ayrıştırıcısı ters eğik çizgiyi görüyor ve kaçış sırasını tamamlayacağından sonra başka bir karakter olmasını bekliyor. Bunu aşmanın en kolay yolu, verdiğiniz dizedeki özel karakterlerden kaçacak java.util.regex.Pattern.quote() yöntemini kullanmaktır. Bu kodunu değiştirmek ile

olur:

String splitRegex = Pattern.quote(System.getProperty("file.separator")); 
String[] splittedFileName = fileName.split(splitRegex); 
String simpleFileName = splittedFileName[splittedFileName.length-1]; 
2

Başka basit bir yolu bu yolları eğer yani, emin değilim platformu ile uyumlu olması şartıyla işe yarayacağına inanıyorum

File f = new File(path); 
String fileName = f.getName(); 

yapmak olabilir "c: \ file.txt" yolu Linux üzerinde çalışacak veya çalışmaz.

İlgili konular