2010-11-07 3 views
0

Методы Java isFile() и isDirectory() работают только в том случае, если файл или каталог действительно существуют, если они не существуют?Как определить файл или файл?

Есть ли альтернатива этим методам?

пример:

File f=new File(var); 

Теперь var ничего, генерируется из среды выполнения, так что я не знаю, если это файл или нет, и вы можете инициализировать объект без файла или путь существующего. Я хочу получить: как определить, действительно ли файл является файлом, даже если он не существует? Если я определяю, есть ли расширения, я мог бы сказать, но в Linux я думаю, что некоторые файлы не имеют расширений файлов, и мне нужно работать на всех платформах.

+3

Ваш пример не помогает. Отсутствующий объект файловой системы не является ни файлом, ни каталогом. Это как если бы я сказал, что хочу знать, какая у меня модель Porsche, хотя у меня нет Porsche. Расширения не имеют значения. Да, файлы без расширения довольно распространены в Unix. Они также могут существовать в Windows, я полагаю, хотя они и менее распространены. Аналогичным образом, возможно иметь каталоги с расширениями (например: «rc2.d» или «Safari.app»), поэтому нет надежного способа сказать только из имени, должно ли оно быть каталогом или файлом. –

ответ

8

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

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

+0

Я думаю, что опубликую пример –

+0

Даже в этом примере не имеет смысла спрашивать, представляет ли объект 'File' файл или каталог ... это не так. Если вы вызываете 'f.createNewFile()', то он станет нормальным файлом; если вы вызываете 'f.mkDir()', то он станет каталогом. –

1

Вызвать метод exists(), чтобы определить, существует ли файл или каталог, или вызвать getPath(), чтобы получить путь к тому, что указывает объект File (независимо от того, существует ли этот путь или нет).

Обновлено для получения дополнительной информации.

4

http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html#isFile%28%29

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

Таким образом, дополнительно проверка наличия существует() не требуется.

Конечный ввод: Просто отбросьте концепцию расширения файлов. Это действительно ничего, кроме имени файла. Он просто используется в качестве метаданных для других программ в операционной системе, поэтому некоторые файлы могут быть связаны/открыты с определенными программами.

+0

Да, я смущен в этом утверждении, которое, я думаю, также обозначает имя файла, поэтому, если путь + имя файла не существует, я понимаю, что в этом контексте я прав? –

+0

pathname - путь + имя файла –

0

Возможно, вы захотите проверить, является ли var допустимой строкой, представляющей допустимый путь. Может быть, что-то вроде если (вар! = NULL & & вар InstanceOf Строка & & ((String) вар) .matches ("регулярное выражение для файловой системы, лежащие в основе системы зависит")) {// делать что-то здесь }

затем вы можете использовать метод exists(), чтобы проверить, действительно ли файл.

Смежные вопросы