Java isFile (), isDirectory () без проверки существования - PullRequest
8 голосов
/ 28 декабря 2011

Я хочу проверить, является ли данная строка файлом или каталогом, я пробовал методы isFile () и isDirectory () класса File , но проблема в том, что если каталог илифайл не существует, эти методы возвращают false, потому что, как указано в javadoc:

isFile () :

true, если и только если файл обозначенпо этому абстрактному пути существует и является нормальным файлом;false в противном случае

isDirectory () :

true, если и только если файл, обозначенный этим абстрактным путем, существует и является каталогом;ложь в противном случае

В основном Мне нужны два метода без предложения существующих ...

Поэтому я хочу проверить, соответствует ли данная строка формату каталога илисоответствует формату файла в многоплатформенном контексте (поэтому должен работать в Windows, Linux и Mac Os X).

Существует ли какая-либо библиотека, предоставляющая эти методы?Что может быть лучшей реализацией этих методов?

UPDATE

В случае строки, которая может быть как (без расширения), по умолчанию должна быть определена как директория, если файл с таким путем не существует.

Ответы [ 3 ]

7 голосов
/ 28 декабря 2011

Итак, я хочу проверить, соответствует ли данная строка формату каталога или формату файла в многоплатформенном контексте (поэтому должен работать в Windows, Linux и Mac Os X).

В Windows каталог может иметь расширение, а файл не обязательно должен иметь расширение.Таким образом, вы не можете сказать, просто посмотрев на строку.

Если вы применяете правило, согласно которому каталог не имеет расширения, а файл всегда имеет расширение, то вы можете определить разницу междукаталог и файл, ища расширение.

4 голосов
/ 28 декабря 2011

Почему бы просто не обернуть их в вызов File#exists()?

File file = new File(...);
if (file.exists()) {

    // call isFile() or isDirectory()

}

Сделав это, вы фактически сведете на нет часть «существует» в isFile()isDirectory(), поскольку вам гарантировано, что оно существует.

Также возможно, что я неправильно понял то, что вы спрашиваете здесь.Учитывая вторую часть вашего вопроса, пытаетесь ли вы использовать isFile() и isDirectory() на несуществующих файлах, чтобы проверить, выглядят ли они как , это файлы или каталоги?Если это так, то это будет сложно сделать с помощью File API (и вообще сложно).Если /foo/bar/baz не существует, невозможно определить, является ли это файл или каталог.Это может быть либо.

2 голосов
/ 28 декабря 2011

Звучит так, будто вы знаете, что хотите, согласно вашему обновлению: если путь не существует, а путь имеет расширение, то это файл, если нет, это каталог.Что-то вроде этого будет достаточно:

private boolean isPathDirectory(String myPath) {
    File test = new File(myPath);

    // check if the file/directory is already there
    if (!test.exists()) {
        // see if the file portion it doesn't have an extension
        return test.getName().lastIndexOf('.') == -1;
    } else {
        // see if the path that's already in place is a file or directory
        return test.isDirectory();
    }
}
...