2013-04-29 6 views
18

Sto facendo un programma per memorizzare i dati da file Excel nel database. Vorrei che l'utente desse in console il percorso completo del file e dopo che il programma prendesse solo il nome del file per continuare.Ottieni il nome file senza estensione dal percorso completo

Il codice per caricare il percorso completo è:

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('.'))); 

Dopo che vorrebbe avere: String filename = .......

Il percorso completo che l'utente digita sarebbe come questo: C:\\Users\\myfiles\\Documents\\test9.xls

Il nome file che vorrei creare avrebbe preso solo il nome senza lo .xls! Qualcuno potrebbe aiutarmi come farei questo?

Come vorrei farlo se volessi prendere come nome file "test9.xls"? -

+0

cambiamento '/' a '\\' * file stringa = strfullPath.substring (strfullPath.lastIndexOf ('\\') + 1); * –

+0

Come lo farei se mi piacerebbe prendere come filename "test9.xls"? – dedmar

risposta

1

È possibile chiamare il metodo file.getName() che restituisce il nome del file come String. Quindi tagli l'estensione.

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

Se il file non ha estensione, 'fileName' diventerà' "" '. –

+0

@AndrewThompson che prende in considerazione, questo è l'unico approccio che non fallisce se il nome del file ha "." inoltre l'estensione. – andrebola

+0

deve essere fileName.lastIndexOf (".") - 1 non fileName.lastIndexOf (".") + 1 – Ahmed

29

Si può fare in questo modo:

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

oppure è possibile utilizzare la apache.commons.io.FilenameUtils:

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

+1 Per non reinventare la ruota. –

+0

grazie per FilenameUtils! –

+0

Più uno per l'utilizzo del piccolo snippet che utilizza puro codice Java invece di librerie di terze parti. – mahmood

18

è possibile utilizzare la classe File per ottenere il nome del file:

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

Utilizzo di un oggetto File ha numerosi vantaggi, tra cui la possibilità di testare il file esiste:

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

È inoltre necessario controllare il file ha un'estensione prima di provare e spogliarla:

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

I di solito utilizzare questa soluzione descritta in altri post:

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

In futuro, quando rispondi alle domande, fornisci una spiegazione con qualsiasi esempio di codice che spieghi perché questo funzionerà. –