Jak uzyskać katalog pliku za pomocą obiektu File?

110

Rozważ kod:

File file = new File("c:\\temp\\java\\testfile");

testfilejest plikiem i może istnieć lub nie. Chcę uzyskać katalog c:\\temp\\java\\przy użyciu Fileobiektu. Jak mam to zrobić?

Koerr
źródło

Odpowiedzi:

170

W każdym razie spodziewałbym się file.getParent()(lub file.getParentFile()) dać ci to, czego chcesz.

Dodatkowo, jeśli chcesz dowiedzieć się, czy oryginał File nie istnieje i jest katalogiem, to exists()i isDirectory()to, co chcesz po.

Jon Skeet
źródło
9
Używaj ostrożnie file.getParent (), ponieważ w niektórych przypadkach może zwrócić wartość null.
geschema
Odpowiedź @geschema Ponaguynik poniżej dotyczy tego
4myle
24

File.getParent () z dokumentacji Java

Joel
źródło
Tekst wypełniający
Caelum
14

Jeśli zrobisz coś takiego:

File file = new File("test.txt");
String parent = file.getParent();

parent będzie zerowa.

Aby uzyskać katalog tego pliku, możesz zrobić dalej:

parent = file.getAbsoluteFile().getParent();
Ponaguynik
źródło
8

File API File.getParent lub File.getParentFile powinny zwrócić katalog pliku.

Twój kod powinien wyglądać następująco:

    File file = new File("c:\\temp\\java\\testfile");
    if(!file.exists()){
        file = file.getParentFile();
    }

Możesz dodatkowo sprawdzić, czy twój plik nadrzędny jest katalogiem za pomocą interfejsu API File.isDirectory

if(file.isDirectory()){
    System.out.println("file is directory ");
}
YoK
źródło
4
File directory = new File("Enter any 
                directory name or file name");
boolean isDirectory = directory.isDirectory();
if (isDirectory) {
  // It returns true if directory is a directory.
  System.out.println("the name you have entered 
         is a directory  : "  +    directory);  
  //It returns the absolutepath of a directory.
  System.out.println("the path is "  + 
              directory.getAbsolutePath());
} else {
  // It returns false if directory is a file.
  System.out.println("the name you have
   entered is a file  : " +   directory);
  //It returns the absolute path of a file.
  System.out.println("the path is "  +  
            file.getParent());
}
Jigar Joshi
źródło
1
Nie odpowiadasz na pytanie, to nie działa dla pliku.
toni07
codefinal File file = new File ("C: /dev/changeofseasons.mid"); System.out.println ("plik istnieje?" + Plik.exists ()); System.out.println ("katalog pliku:" + plik.getAbsolutePath ()); Ok, przepraszam za kiepskie wcięcia, nie sądzę, aby można było formatować kod w komentarzach. Mimo to twój kod oczywiście nie działa.
toni07
Dzięki, naprawiono <! --->
Jigar Joshi
3
File filePath=new File("your_file_path");
String dir="";
if (filePath.isDirectory())
{
    dir=filePath.getAbsolutePath();
}
else
{
    dir=filePath.getAbsolutePath().replaceAll(filePath.getName(), "");
}
Lovenish Goyal
źródło
Potrzebne są opisy.
Halvor Holsten Strand
1
Witamy w Stack Overflow! Ogólnie rzecz biorąc, odpowiedzi w kodzie wymagają małego wyjaśnienia - zobacz ten post dotyczący meta Stackoverflow . W odpowiedzi, którą opublikowałeś, być może będziesz musiał wyjaśnić, że próbujesz podać ogólny przypadek i jaki ma to związek z rzeczywistym postem PO. A mówiąc poważniej - warto zastanowić się, jak by to działało your_file_path = "C:\\testfiles\\temp\\testfile";- nie sądzę, by przyniosło to to, na co masz nadzieję.
J Richard Snape
Powinna być poprawna odpowiedź. Spowoduje to wyświetlenie pełnej ścieżki do pliku.
Magno C,
0

Możesz tego użyć

 File dir=new File(TestMain.class.getClassLoader().getResource("filename").getPath());
Saurabh
źródło
0
String parentPath = f.getPath().substring(0, f.getPath().length() - f.getName().length()); 

To byłoby moje rozwiązanie

szlachta
źródło
-1

Uważam, że jest to bardziej przydatne do uzyskania bezwzględnej lokalizacji pliku.

File file = new File("\\TestHello\\test.txt");
System.out.println(file.getAbsoluteFile());
C.Ikongo
źródło