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

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

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

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

+756
источник поделиться
23 ответа

Используя java.io.File:

File f = new File(filePathString);
if(f.exists() && !f.isDirectory()) { 
    // do something
}
+1253
источник

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

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

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

+403
источник
другие ответы

Связанные вопросы


Похожие вопросы

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

import java.nio.file.*;

Path path = Paths.get(filePathString);

if (Files.exists(path)) {
  // file exist
}

if (Files.notExists(path)) {
  // file is not exist
}

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

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

if (Files.isDirectory(path)) {
  // path is directory
}

if (Files.isRegularFile(path)) {
  // path is regular file
}

Проверьте этот учебник Java SE 7.

+129
источник

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

if(Files.exists(Paths.get(filePathString))) { 
    // do something
}
+40
источник
File f = new File(filePathString); 

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

f.createNewFile();

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

+27
источник
f.isFile() && f.canRead()
+24
источник

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

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

    new File("/path/to/file").exists();
    
  2. Проверить файл

    File f = new File("/path/to/file"); 
      if(f.exists() && f.isFile()) {}
    
  3. Проверьте каталог.

    File f = new File("/path/to/file"); 
      if(f.exists() && f.isDirectory()) {}
    
  4. Java 7 способ.

    Path path = Paths.get("/path/to/file");
    Files.exists(path)  // Existence 
    Files.isDirectory(path)  // is Directory
    Files.isRegularFile(path)  // Regular file 
    Files.isSymbolicLink(path)  // Symbolic Link
    
+16
источник

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

+15
источник

первый хит для "java файла существует" в google:

import java.io.*;

public class FileTest {
    public static void main(String args[]) {
        File f = new File(args[0]);
        System.out.println(f + (f.exists()? " is found " : " is missing "));
    }
}
+14
источник

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

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

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

+9
источник

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

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

File f = new File(filePathString);
if(f.exists() && f.isFile()) {
    //do something ...
}

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

+8
источник

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

+4
источник

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

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

if(Files.isRegularFile(Paths.get(pathToFile))) {
    // do something
}

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

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

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

+4
источник

Например, если у вас есть каталог файлов, и вы хотите проверить, существует ли он

File tmpDir = new File("/var/tmp");

boolean exists = tmpDir.exists();

exists вернет false, если файл не существует

источник: https://alvinalexander.com/java/java-file-exists-directory-exists

+3
источник

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

 private static void fetchIndexSafely(String url) throws FileAlreadyExistsException {
        File f = new File(Constants.RFC_INDEX_LOCAL_NAME);
        if (f.exists()) {
            throw new FileAlreadyExistsException(f.getAbsolutePath());
        } else {
            try {
                URL u = new 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-implementations

+2
источник

Если вы хотите проверить File в каталоге dir

String directoryPath = dir.getAbsolutePath()
boolean check = new File(new File(directoryPath), aFile.getName()).exists();

и проверьте результат check

+1
источник
new File("/path/to/file").exists(); 

выполнит трюк

+1
источник

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

File f = new File(new URI("file:///"+filePathString.replace('\\', '/')));
if(f.exists() && !f.isDirectory()) { 
    // to do
}
+1
источник

File.exists(), чтобы проверить, существует ли файл, он возвращает логическое значение, указывающее статус операции проверки; true, если файл существует; false, если не существует.

File f = new File("c:\\test.txt");

if(f.exists()){
    System.out.println("File existed");
}else{
    System.out.println("File not found!");
}
+1
источник

Вы можете использовать следующий код для проверки:

import java.io.File;
class Test{
    public static void main(String[] args){
        File f = new File(args[0]); //file name will be entered by user at runtime
        System.out.println(f.exists()); //will print "true" if the file name given by user exists, false otherwise

        if(f.exists())
        {
             //executable code;
        }
    }
}
0
источник

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

import java.nio.file.Paths;

String file = "myfile.sss";
if(Paths.get(file).toFile().isFile()){
    //...do somethinh
}
0
источник

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

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

Чтобы проверить, существует ли файл, просто импортируйте библиотеку java.io. *

File f = new File("C:\\File Path");

if(f.exists()){
        System.out.println("Exists");        //if file exists
}else{
        System.out.println("Doesn't exist");         //if file doesn't exist
}

Источник: http://newsdivariotipo.altervista.org/java-come-controllare-se-un-file-esiste/

-4
источник

Посмотрите другие вопросы по меткам или Задайте вопрос