Как проверить, существует ли файл на Java?

Как я могу проверить, существует ли файл, прежде чем открывать его для чтения в Java (эквивалент Perl -e $ filename )?

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

Если возможно, я бы предпочел реальный вызов API , возвращающий истину/ложь, в отличие от некоего API вызова для открытия файла и перехвата, когда он генерирует исключение, которое вы проверяете «нет файла» в тексте «, но я могу жить с последним.


Использование java.io.File :

  Файл f = новый файл (filePathString); if (f.exists () &&! f.isDirectory ()) {//что-то делаем}  

Я бы рекомендовал использовать isFile () вместо exists () . В большинстве случаев вы хотите проверить, указывает ли путь на файл, а не только на то, что он существует. Помните, что exists () вернет true, если ваш путь указывает на каталог.

  new File ("path/to/file.txt  ") .isFile ();  

new File (" C:/"). exists () вернет true, но не позволит вам для открытия и чтения из него как файла.


Я бы рекомендовал использовать isFile () вместо exists () . В большинстве случаев вы хотите проверить, указывает ли путь на файл, а не только на то, что он существует. Помните, что exists () вернет true, если ваш путь указывает на каталог.

  new File ("path/to/file.txt  ") .isFile ();  

new File (" C:/"). exists () вернет true, но не позволит вам для открытия и чтения из него как файла.


Используя nio в Java SE 7,

  import java.nio.file. *; Путь path = Paths.get (filePathString); if (Files.exists (path)) {//файл существует} if (Files.notExists  (путь)) {//файл не существует}  

Если и существует , и notExists , возвращают false , существование файла невозможно проверить. (возможно, нет прав доступа к этому пути)

Вы можете проверить, является ли path каталогом или обычным файлом.

  if (Files.isDirectory (path)) {//путь - это каталог} if (Files.isRegularFile (path)) {//путь - это обычный файл}  

Пожалуйста проверьте это руководство по Java SE 7.


Используя nio в Java SE 7,

  import java.nio.file. *; Path path = Paths.get (filePathString); if (Files.exists (path)) {//файл существует} if (Files. notExists (path)) {//файл не существует}  

Если и существует , и notExists , возвращаются false, существование файла невозможно проверить. (возможно, нет прав доступа к этому пути)

Вы можете проверить, является ли path каталогом или обычным файлом.

  if (Files.isDirectory (path)) {//путь - это каталог} if (Files.isRegularFile (path)) {//путь - это обычный файл}  

Пожалуйста проверьте это руководство по Java SE 7.


Использование Java 8:

  if (Files.exists (Paths.get (filePathString))) {//что-то делаем}  


Использование Java 8:

  if (Files.exists (Paths.get (filePathString))) {//что-то делаем}  

  Файл f = новый файл (filePathString);   

Это не создаст физический файл. Просто создадим объект класса File. Чтобы физически создать файл, вы должны явно создать его:

  f.createNewFile ();  

Итак, f.exists () можно использовать для проверки, существует ли такой файл или нет.


  Файл f = новый файл (filePathString);   

Это не создаст физический файл. Просто создадим объект класса File. Чтобы физически создать файл, вы должны явно создать его:

  f.createNewFile ();  

Итак, f.exists () можно использовать для проверки того, существует ли такой файл или нет.


  f.isFile () && f.canRead ()  


  f.  isFile () && f.canRead ()  

Есть несколько способов добиться этого.

  1. На всякий случай. Это может быть файл или каталог.

      новый файл ("/путь/к/файлу"). exists ();  
  2. Проверить наличие файла

      Файл f = новый файл ("/путь/к/файлу");  if (f.exists () && f.isFile ()) {}  
  3. Проверить каталог.

      Файл f = новый файл ("/путь/к/файлу");  if (f.exists () && f.isDirectory ()) {}  
  4. Способ Java 7.

      Path path = Paths.get ("/path/to/file"); Files.exists (path)//Существование Files.isDirectory (путь)//это DirectoryFiles  .isRegularFile (путь)//Обычный файл Files.isSymbolicLink (путь)//Символьная ссылка  


Есть несколько способов добиться этого.

  1. В случае только существования. Это может быть файл или каталог.

      новый файл ("/путь/к/файлу"). exists ();  
  2. Проверить наличие файла

      Файл f = новый файл ("/путь/к/файлу");  if (f.exists () && f.isFile ()) {}  
  3. Проверить каталог.

      Файл f = новый файл ("/путь/к/файлу");  if (f.exists () && f.isDirectory ()) {}  
  4. Способ Java 7.

      Path path = Paths.get ("/path/to/file"); Files.exists (path)//Существование Files.isDirectory (путь)//это DirectoryFiles  .isRegularFile (путь)//Обычный файл Files.isSymbolicLink (путь)//Символьная ссылка  

Вы можете использовать следующее: File.exists()


Вы можете использовать следующее: File.exists()


первое попадание по запросу «файл java существует» в Google:

  import java.io. *; открытый класс FileTest {public static void main (  String args []) {Файл f = новый файл (args [0]);  System.out.println (f + (f.exists ()? "Найдено": "отсутствует"));  }}  


первое нажатие для «java-файл существует» в google:

  import java.io. *; открытый класс FileTest {public static void main (String args []) {File f = new File (args [0]);  System.out.println (f + (f.exists ()? "Найдено": "отсутствует"));  }}  

Не надо. Просто перехватите FileNotFoundException. Файловая система должна проверить, существует ли файл в любом случае. Нет смысла делать все это дважды, и есть несколько причин не делать этого, например:

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

Не пытайтесь угадать систему повторно. Он знает. И не пытайтесь предсказывать будущее. В общем, лучший способ проверить, доступен ли какой-либо ресурс, — это просто попробовать его использовать.


Не надо. Просто перехватите FileNotFoundException. Файловая система должна проверить, существует ли файл в любом случае.. Нет смысла делать все это дважды, и есть несколько причин не делать этого, например:

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

Не пытайтесь угадать систему повторно. Он знает. И не пытайтесь предсказывать будущее. В общем, лучший способ проверить, доступен ли какой-либо ресурс, — это просто попытаться его использовать.


Для меня комбинация принятого ответа Шона А.О. Харни и полученный комментарий Cort3z кажется лучшим решением.

Использован следующий фрагмент:

  File f = new File (filePathString)  ; if (f.exists () && f.isFile ()) {//что-то делаем ...}  

Надеюсь, это кому-то поможет.


Для меня комбинация принятого ответа Шона А.О. Харни и полученный комментарий Cort3z кажется лучшим решением.

Использован следующий фрагмент:

  File f = new File (filePathString)  ; if (f.exists () && f.isFile ()) {//что-то делаем ...}  

Надеюсь, это кому-то поможет.


Я знаю, что немного опоздал в этой теме. Однако вот мой ответ, действительный начиная с Java 7 и выше.

Следующий фрагмент

  if (Files.isRegularFile (Paths.get (  pathToFile))) {//что-то делаем}  

идеально подходит, потому что метод isRegularFile возвращает false если файл не существует. Следовательно, нет необходимости проверять, существует ли Files.exists (...) .

Обратите внимание, что другие параметры являются параметрами, указывающими, как следует обрабатывать ссылки. По умолчанию следуют символические ссылки.

Из документации Java Oracle


Я знаю, что немного опоздал в этой ветке. Однако вот мой ответ, действительный начиная с Java 7 и выше.

Следующий фрагмент

  if (Files.isRegularFile (Paths.get (  pathToFile))) {//что-то делаем}  

идеально подходит, потому что метод isRegularFile возвращает false если файл не существует. Следовательно, нет необходимости проверять, существует ли Files.exists (...) .

Обратите внимание, что другие параметры являются параметрами, указывающими, как следует обрабатывать ссылки. По умолчанию следуют символические ссылки.

Из документации Java Oracle


Также стоит ознакомиться с Commons FileUtils https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FileUtils.html, у которого есть дополнительные методы для управления файлами и часто лучше чем JDK.


Также стоит ознакомиться с Commons FileUtils https://commons.apache.org/proper /commons-io/javadocs/api-2.5/org/apache/commons/io/FileUtils.htmlЭто дополнительные методы управления файлами, которые часто лучше, чем JDK.


Простой пример с хорошими практиками кодирования и охватывающий все случаи:

  private static void fetchIndexSafely (String url) выбрасывает FileAlreadyExistsException {File  f = новый файл (Constants.RFC_INDEX_LOCAL_NAME);  if (f.exists ()) {выбросить новое исключение FileAlreadyExistsException (f.getAbsolutePath ());  } else {попробуйте {URL u = новый URL (url);  FileUtils.copyURLToFile (u, f);  } catch (MalformedURLException ex) {Logger.getLogger (RfcFetcher.class.getName ()). log (Level.SEVERE, null, ex);  } catch (IOException ex) {Logger.getLogger (RfcFetcher.class.getName ()). log (Level.SEVERE, null, ex);  }}}  

Ссылка и другие примеры на

https://zgrepcode.com/examples/java/java/nio/file/filealreadyexistsexception- реализации


Простой пример с хорошими практиками кодирования и охватывающий все случаи:

  private static void  fetchIndexSafely (String url) выдает исключение FileAlreadyExistsException {файл f = новый файл (Constants.RFC_INDEX_LOCAL_NAME);  if (f.exists ()) {выбросить новое исключение FileAlreadyExistsException (f.getAbsolutePath ());  } else {попробуйте {URL u = новый URL (url);  FileUtils.copyURLToFile (u, f);  } catch (MalformedURLException ex) {Logger.getLogger (RfcFetcher.class.getName ()). log (Level.SEVERE, null, ex);  } catch (IOException ex) {Logger.getLogger (RfcFetcher.class.getName ()). log (Level.SEVERE, null, ex);  }}}  

Ссылка и другие примеры на

https://zgrepcode.com/examples/java/java/nio/file/filealreadyexistsexception- реализации


Не используйте конструктор файлов со строкой.
Это может не сработать!
Вместо этого используйте URI:

  File f = new File (new URI ("file:///" + filePathString.replace ('\'  , '/'))); if (f.exists () &&! f.isDirectory ()) {//сделать}  


Не используйте конструктор файлов со строкой.
Это может не сработать!
Вместо этого используйте URI:

  File f = new File (new URI ("file:///" + filePathString.replace ('\'  , '/'))); if (f.exists () &&! f.isDirectory ()) {//сделать}  

Вы можете сделать это так

  import java.nio.file.Paths; String file = "myfile.sss";  if (Paths.get (file) .toFile (). isFile ()) {//... сделать что-нибудь}  


Вы можете сделать это так

  import java.nio.file.Paths; String file = "myfile.sss"; if (Paths.get (file) .toFile (). isFile ()) {//... do somethinh  }  

Для разработки этих методов существует конкретная цель. Мы не можем сказать, чтобы кто-нибудь проверял, существует ли файл или нет.

  1. isFile () : проверяет, существует ли файл , обозначенный этим абстрактным путем, является обычным файлом.
  2. exists () : проверяет, является ли файл или каталог , обозначенный этим абстрактным путем, exists.docs.oracle.com

Существует определенная цель для разработки этих методов. Мы не можем сказать, что использовать кого-либо для проверки наличия файла или нет.

  1. isFile () : проверяет, существует ли файл , обозначенный этим абстрактным путем, является обычным файлом.
  2. exists () : проверяет, является ли файл или каталог обозначается этим абстрактным путем exists.docs.oracle.com
Оцените статью
techsly.ru
Добавить комментарий