Как получить каталог файла с помощью объекта File?

110

Рассмотрим код:

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

testfileэто файл, и он может существовать, а может и не существовать. Я хочу получить каталог c:\\temp\\java\\с помощью Fileобъекта. Как мне это сделать?

Koerr
источник

Ответы:

170

В любом случае я бы ожидал file.getParent()(или file.getParentFile()) дать вам то, что вы хотите.

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

Джон Скит
источник
9
Используйте file.getParent () осторожно, потому что в некоторых случаях он может вернуть null.
geschema
Ответ @geschema Ponaguynik ниже касается этого
4myle,
15

Если вы сделаете что-то вроде этого:

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

Вы можете дополнительно проверить, что ваш родительский файл находится в каталоге, используя File.isDirectory API.

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
codeокончательный файл file = новый файл ("C: /dev/changeofseasons.mid"); System.out.println («файл существует?» + File.exists ()); System.out.println ("каталог файла:" + file.getAbsolutePath ()); Хорошо, извините за неубедительные отступы, я не думаю, что можно форматировать код в комментариях. Тем не менее, ваш код явно не работает.
toni07
Спасибо, исправлено <! --->
Джигар Джоши
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
источник
Описания нужны.
Halvor Holsten Strand
1
Добро пожаловать в Stack Overflow! В общем, ответы на вопросы кода требуют небольшого пояснения - см. Этот мета- пост на Stackoverflow . В ответе, который вы опубликовали, вам, возможно, потребуется объяснить, что вы пытаетесь дать общий случай и как он соотносится с фактическим сообщением OP. А если серьезно - вы можете подумать, как это будет работать 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()); 

Это было бы моим решением

nobes
источник
-1

Я нашел это более полезным для получения абсолютного местоположения файла.

File file = new File("\\TestHello\\test.txt");
System.out.println(file.getAbsoluteFile());
К. Иконго
источник