it-swarm.com.ru

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

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

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

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

739
DVK

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

File f = new File(filePathString);
if(f.exists() && !f.isDirectory()) { 
    // do something
}
1237
Sean A.O. Harney

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

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

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

398
Chris Dail

Используя 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
Wonil

Используя Java 8:

if(Files.exists(Paths.get(filePathString))) { 
    // do something
}
39
Wendel
File f = new File(filePathString); 

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

f.createNewFile();

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

27
rizwan
f.isFile() && f.canRead()
24
jhumble

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

14
Francis Upton

первый запрос на "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
just somebody

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

  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
    
13
Raghu K Nair

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

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

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

9
user207421

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

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

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

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

8
X-Fate

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

4
peter.murray.rust

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

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

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

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

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

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

4
avi.elkharrat

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

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

boolean exists = tmpDir.exists();

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

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

3
ID127898

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

 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
Amandeep Singh

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

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

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

1
user3618182

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

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

if(f.exists()){
    System.out.println("File existed");
}else{
    System.out.println("File not found!");
}
1
KIBOU Hassan
new File("/path/to/file").exists(); 

сделает свое дело

1
user4833142

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

File f = new File(new URI("file:///"+filePathString.replace('\\', '/')));
if(f.exists() && !f.isDirectory()) { 
    // to do
}
1
iviorel

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

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
Pankti

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

import Java.nio.file.Paths;

String file = "myfile.sss";
if(Paths.get(file).toFile().isFile()){
    //...do somethinh
}
0
Rodrigo Pavan

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

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