Як отримати каталог каталогу за допомогою об’єкта File?


110

Розглянемо код:

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

testfileє файлом, і він може існувати або не існувати. Я хочу отримати каталог c:\\temp\\java\\за допомогою Fileоб’єкта. Як мені це робити?

Відповіді:


170

В будь-якому випадку я би сподівався file.getParent()(або file.getParentFile()) дати вам те, що ви хочете.

Крім того, якщо ви хочете , щоб з'ясувати , є чи оригінал File дійсно існує , і є каталогом, то exists()і isDirectory()є те , що ви після цього .


9
Обережно використовуйте file.getParent (), оскільки він може повернути нуль у деяких випадках.
гешема

Відповідь @geschema Ponaguynik нижче стосується цього
4myle


14

Якщо ви робите щось подібне:

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

parent буде недійсним.

Отже, щоб отримати каталог цього файлу, ви можете зробити наступне:

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

8

API файлу File.getParent або File.getParentFile повинен повернути вам Каталог файлів.

Ваш код повинен бути таким:

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

Ви також можете перевірити, чи ваш батьківський файл - це каталог за допомогою API File.isDirectory

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
Ви не відповідаєте на запитання, це не працює для файлу.
toni07

codefinal file file = новий файл ("C: /dev/changeofseasons.mid"); System.out.println ("файл існує?" + File.exists ()); System.out.println ("каталог файлу:" + file.getAbsolutePath ()); Гаразд, вибачте за кульгаве відступ, я не думаю, що форматування коду в коментарях неможливо. І все-таки ваш код очевидно не працює.
toni07

Дякую, виправлено <! --->
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(), "");
}

Описи потрібні.
Halvor Holsten Strand

1
Ласкаво просимо до переповнення стека! Загалом, відповіді на коди потребують невеликого пояснення - дивіться цю мета- пост Stackoverflow . Опублікувавши відповідь, можливо, вам доведеться пояснити, що ви намагаєтесь дати загальний випадок, і як це стосується фактичної посади ОП. Більш серйозно - ви можете подумати, як це буде працювати your_file_path = "C:\\testfiles\\temp\\testfile";- я не думаю, що це дасть те, на що ви сподіваєтесь.
Дж. Річард Снейп

Повинна бути правильна відповідь. Це покаже повний шлях до файлу.
Magno C

0

Ви можете використовувати це

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

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

Це було б моїм рішенням


-1

Я вважаю це більш корисним для отримання абсолютного розташування файлів.

File file = new File("\\TestHello\\test.txt");
System.out.println(file.getAbsoluteFile());
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.