Как определить, является ли данный путь файлом или каталогом в Java без использования пакета? - PullRequest
0 голосов
/ 13 января 2019

Я создаю Программу Java, которая определяет, является ли данный путь файлом или каталогом без использования какого-либо пакета.
Какие атрибуты различают файл и каталог?
Кроме того, как метод isFile() и isDirectory() из java.io.File работает на сервере?

Я попытался отделиться от расширения, но обнаружил, что имя каталога также может содержать символы после точки, например directoryName.extension. У меня есть некоторые исследования в Интернете, но не удалось найти надежное решение.

class FileCheck{
    public static void main(String[] args){
        boolean checkOne = isFile(C:\users);
        boolean checkTwo = isFile(C:\users\file.txt);
        boolean checkThree = isDirectory(C:\users);
        boolean checkFour = isDirectory(C:\users\file.txt);
    }
}

Не путайте с методами isFile() и isDirectory(). Это пользовательские функции; не импортируется из java.io.File.

Я ожидаю, что если я передам C:\users в качестве аргумента, он должен вернуть true значение из функции isDirectory(), а когда C:\users\file.txt, он должен вернуть false. Та же логика применяется для метода isFile().

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Что такое файл и что такое каталог, в конечном итоге зависит от файловой системы. Чтобы различить файл и каталог, JVM вызовет файловую систему и вернет информацию. Знания только Path недостаточно.

Если вы хотите копать глубже, это становится более сложным. Например, внутренне в файловой системе Linux Ext4 все является файлом. Каталог - это просто специальный файл с дополнительной информацией в соответствии с Ext4 Disk Layout :

В файловой системе ext4 каталог - это более или менее плоский файл, который отображает произвольную строку байтов (обычно ASCII) на номер инода в файловой системе. В файловой системе может быть много записей каталога, ссылающихся на один и тот же номер инода, - они называются жесткими ссылками, поэтому жесткие ссылки не могут ссылаться на файлы в других файловых системах. Как таковые, записи каталога находят путем чтения блока (ов) данных, связанных с файлом каталога, для конкретной записи каталога, которая требуется.

0 голосов
/ 13 января 2019

Нет способа сделать это.

Это довольно просто:

  • если строка, которую вы передаете в качестве аргумента этим гипотетическим методам, не существует в файловой системе ... тогда никто не может сказать вам, является ли имя файлом или каталогом. Потому что это легко может быть как
  • если строка обозначает существующую вещь: просто используйте интерфейсы Java, которые позволяют запрашивать ее.

Другими словами: нет способа узнать, представляет ли произвольная строка файл или каталог, не проверяя файловую систему. И что еще более важно: нет способа получить «файл или каталог» только из одной «строки пути».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...