2013-04-29 28 views
18

Tworzę program do przechowywania danych z plików programu Excel w bazie danych. Chciałbym, aby użytkownik podał w konsoli pełną ścieżkę do pliku i po tym, jak program wziął tylko nazwę pliku, aby kontynuować.Pobierz nazwę pliku bez rozszerzenia z pełnej ścieżki

Kod ładowania pełną ścieżkę jest:

String strfullPath = ""; 
Scanner scanner = new Scanner(System.in); 
System.out.println("Please enter the fullpath of the file"); 
strfullPath = scanner.nextLine(); 
String file = strfullPath.substring(strfullPath.lastIndexOf('/') + 1); 
System.out.println(file.substring(0, file.indexOf('.'))); 

Po tym chciałbym posiadać: String filename = .......

Pełna ścieżka że użytkownik może wpisać byłoby tak: C:\\Users\\myfiles\\Documents\\test9.xls

Nazwa pliku, który utworzyłbym, zawierałaby tylko nazwę bez nazwy .xls! Czy ktoś może mi pomóc, jak bym to zrobił?

Jak mógłbym to zrobić, gdybym chciał pobrać nazwę pliku "test9.xls"? -

+0

change '/' na '\\' * String file = strfullPath.substring (strfullPath.lastIndexOf ('\\') + 1); * –

+0

Jak bym to zrobił, gdybym chciał pobrać nazwę pliku "test9.xls"? – dedmar

Odpowiedz

1

Można wywołać metodę file.getName(), która zwraca nazwę pliku jako ciąg. Następnie wyciąć przedłużenie.

String fileName = file.getName(); 
fileName = fileName.substring(0, fileName.lastIndexOf(".")+1); 
+4

Jeśli plik nie ma rozszerzenia, "nazwa_pliku" stanie się "" ". –

+0

@AndrewThompson biorąc to pod uwagę, jest to jedyne podejście, które nie zawiedzie, jeśli nazwa pliku ma "." oprócz rozszerzenia. – andrebola

+0

powinien być fileName.lastIndexOf (".") - 1 nie fileName.lastIndexOf (".") + 1 – Ahmed

29

Można to zrobić tak:

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

lub można użyć apache.commons.io.FilenameUtils:

String fileNameWithOutExt = FilenameUtils.removeExtension(fileNameWithExt); 
+1

+1 Za nie ponowne wynalezienie koła. –

+0

dzięki za FilenameUtils! –

+0

Plus jeden za użycie małego fragmentu, który używa czystego kodu java zamiast bibliotek zewnętrznych. – mahmood

18

Można użyć klasy File uzyskać nazwę pliku:

File userFile = new File(strfullPath); 
String filename = userFile.getName(); 

Korzystanie z File obiekt ma wiele korzyści, w tym możliwość przetestowania plik istnieje:

if (userFile.isFile()) { 
    // Yay, it's a valid file (not a directory and not an invalid path) 
} 

Należy również sprawdzić plik ma rozszerzenie zanim spróbujesz i rozebrać go:

if (filename.indexOf(".") > 0) { 
    filename = filename.substring(0, filename.lastIndexOf(".")); 
} 
33

I zwykle używać tego rozwiązania opisanego w innym poście:

import org.apache.commons.io.FilenameUtils; 

String basename = FilenameUtils.getBaseName(fileName); 
1
if (!filename.equals(""))  
{ 
     String [] fileparts = filename.split("\\."); 
     String filename = fileparts[0]; //Get first part 
} 
+0

W przyszłości, odpowiadając na pytania, proszę podać wyjaśnienie za pomocą próbek kodu wyjaśniających, dlaczego to zadziała. –

Powiązane problemy