Wie erhalte ich das Verzeichnis einer Datei mithilfe des Dateiobjekts?


110

Betrachten Sie den Code:

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

testfileist eine Datei und kann vorhanden sein oder nicht. Ich möchte das Verzeichnis c:\\temp\\java\\mit dem FileObjekt erhalten. Wie mache ich das?

Antworten:


170

In jedem Fall würde ich erwarten file.getParent()(oder file.getParentFile()), Ihnen zu geben, was Sie wollen.

Außerdem, wenn Sie herausfinden möchten , ob das Original File tut exist und ist ein Verzeichnis, dann exists()und isDirectory()sind das, was du bist nach.


9
Verwenden Sie file.getParent () sorgfältig, da es in einigen Fällen null zurückgeben kann.
geschema

@geschema Ponaguyniks Antwort unten spricht dies an
4myle


14

Wenn Sie so etwas tun:

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

parent wird null sein.

Um das Verzeichnis dieser Datei zu erhalten, gehen Sie wie folgt vor:

parent = file.getAbsoluteFile().getParent();

8

Datei-API File.getParent oder File.getParentFile sollten das Verzeichnis der Datei zurückgeben.

Ihr Code sollte wie folgt aussehen:

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

Sie können außerdem mithilfe der File.isDirectory- API überprüfen, ob Ihre übergeordnete Datei ein Verzeichnis ist

if(file.isDirectory()){
    System.out.println("file is directory ");
}

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());
}

1
Sie beantworten die Frage nicht, dies funktioniert nicht für eine Datei.
Toni07

codeendgültige Datei file = neue Datei ("C: /dev/changeofseasons.mid"); System.out.println ("Datei existiert?" + File.exists ()); System.out.println ("Verzeichnis der Datei:" + file.getAbsolutePath ()); Ok, sorry für lahmes Einrücken, ich glaube nicht, dass es möglich ist, Code in Kommentaren zu formatieren. Trotzdem funktioniert Ihr Code offensichtlich nicht.
Toni07

Danke, behoben <! --->
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(), "");
}

Beschreibungen sind erforderlich.
Halvor Holsten Strand

1
Willkommen bei Stack Overflow! Im Allgemeinen benötigen Code-Antworten eine kleine Erklärung - siehe diesen Meta- Stackoverflow-Beitrag . Mit der Antwort, die Sie gepostet haben, müssen Sie möglicherweise erklären, dass Sie versuchen, einen allgemeinen Fall zu nennen, und wie er sich auf den tatsächlichen Beitrag des OP bezieht. Ernsthafter - Sie möchten vielleicht überlegen, wie es funktionieren würde your_file_path = "C:\\testfiles\\temp\\testfile";- ich glaube nicht, dass es das geben würde, was Sie hoffen.
J Richard Snape

Sollte die richtige Antwort sein. Dies zeigt den vollständigen Pfad zur Datei.
Magno C

0

Sie können dies verwenden

 File dir=new File(TestMain.class.getClassLoader().getResource("filename").getPath());

0
String parentPath = f.getPath().substring(0, f.getPath().length() - f.getName().length()); 

Das wäre meine Lösung


-1

Ich fand dies nützlicher, um den absoluten Speicherort der Datei zu ermitteln.

File file = new File("\\TestHello\\test.txt");
System.out.println(file.getAbsoluteFile());
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.