Come ottenere solo il nome della directory principale di un file specifico


111

Come ottenere ddddal nome del percorso in cui risiede test.java.

File file = new File("C:/aaa/bbb/ccc/ddd/test.java");

1
Si tratta di un file generico o stai cercando di ottenere la directory principale del tuo file sorgente? In quest'ultimo caso, non sono sicuro che tu abbia compreso la compilazione Java. In fase di esecuzione, test.javaprobabilmente non esisterà nemmeno sul computer in cui viene eseguito il programma. È il .classfile compilato che viene eseguito. Quindi questo funzionerà solo se sai dove dddsi trova, nel qual caso non ha senso trovarlo programmaticamente; basta codificarlo.
Mark Peters

Risposte:


141

Usa Fileil getParentFile()metodo e String.lastIndexOf()per recuperare solo la directory principale immediata.

Il commento di Marco è una soluzione migliore di lastIndexOf():

file.getParentFile().getName();

Queste soluzioni funzionano solo se il file ha un file genitore (ad esempio, creato tramite uno dei costruttori di file che prendono un genitore File). Quando getParentFile()è null dovrai ricorrere all'uso lastIndexOfo utilizzare qualcosa come Apache CommonsFileNameUtils.getFullPath() :

FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd

Esistono diverse varianti per mantenere / eliminare il prefisso e il separatore finale. Puoi usare la stessa FilenameUtilsclasse per prendere il nome dal risultato, usare lastIndexOf, ecc.


14
Non hai bisogno lastIndexOf, basta usare file.getParentFile().getName().
Mark Peters

13
Nel caso in cui. Se ritorna null(se hai creato Fileun'istanza con percorso relativo), prova file.getAbsoluteFile().getParentFile().getName().
nidu

1
@MarkPeters Funziona solo quando il file è stato creato con un file genitore, cosa che immagino sia relativamente rara.
Dave Newton

20
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())

f.getParentFile() può essere nullo, quindi dovresti controllarlo.


1
Giusto per essere sicuri, l'output è il seguente: C: / aaa / bbb / ccc / ddd
Guy Avraham

16

Usa sotto,

File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();

Vale la pena sottolineare che questo metodo dovrebbe avere un set genitore, anche se il file sottostante non lo aveva.
Andatura

13

In Java 7 hai la nuova API Paths . La soluzione moderna e più pulita è:

Paths.get("C:/aaa/bbb/ccc/ddd/test.java").getParent().getFileName();

Il risultato sarebbe:

C:/aaa/bbb/ccc/ddd

5

Se hai solo il percorso String e non vuoi creare un nuovo oggetto File puoi usare qualcosa come:

public static String getParentDirPath(String fileOrDirPath) {
    boolean endsWithSlash = fileOrDirPath.endsWith(File.separator);
    return fileOrDirPath.substring(0, fileOrDirPath.lastIndexOf(File.separatorChar, 
            endsWithSlash ? fileOrDirPath.length() - 2 : fileOrDirPath.length() - 1));
}

4
Questo genera ArrayOutOfBoundsException se sei già nella posizione principale - "/" -
Jnmgr

2
File file = new File("C:/aaa/bbb/ccc/ddd/test.java");
File curentPath = new File(file.getParent());
//get current path "C:/aaa/bbb/ccc/ddd/"
String currentFolder= currentPath.getName().toString();
//get name of file to string "ddd"

se devi aggiungere la cartella "ddd" con un altro percorso usa;

String currentFolder= "/" + currentPath.getName().toString();

1

Da java 7 preferirei usare Path. Hai solo bisogno di inserire il percorso in:

Path dddDirectoryPath = Paths.get("C:/aaa/bbb/ccc/ddd/test.java");

e crea un metodo get:

public String getLastDirectoryName(Path directoryPath) {
   int nameCount = directoryPath.getNameCount();
   return directoryPath.getName(nameCount - 1);
}

0

In Groovy:

Non è necessario creare Fileun'istanza per analizzare la stringa in groovy. Può essere fatto come segue:

String path = "C:/aaa/bbb/ccc/ddd/test.java"
path.split('/')[-2]  // this will return ddd

La divisione creerà l'array [C:, aaa, bbb, ccc, ddd, test.java]e l'indice -2punterà alla voce prima dell'ultima, che in questo caso èddd


0
    //get the parentfolder name
    File file = new File( System.getProperty("user.dir") + "/.");
    String parentPath = file.getParentFile().getName();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.