2014-12-22 3 views
21

Нам нужно позвонить file.exists() до file.delete() прежде чем мы сможем удалить файл.Java лучший способ удалить файл, если существует

File file = ...; 
if (file.exists()){ 
    file.delete(); 
} 

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

+3

Ну тогда вам придется копировать каждый раз, когда сторонняя библиотека. –

+0

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

+0

Или вы делаете его внешним проектом, поэтому его можно импортировать в любой другой проект, если вы работаете с eclipse или netbeans. – stealthjong

ответ

49

Начиная с Java 7 вы можете использовать deleteIfExists, который возвращает логическое значение (или выбрасывает исключение) в зависимости от того, был ли файл удален или нет. Этот метод может быть не атомарным по отношению к другим операциям файловой системы. Более того, если файл используется JVM/другой программой, то в некоторой операционной системе он не сможет его удалить. Каждый файл может быть преобразован в путь по методу toPath. Например.

File file = ...; 
boolean result = Files.deleteIfExists(file.toPath()); //surround it in try catch block 
3

Там также решение Java 7, используя новую (МОГЛИ) Путь абстракцию:

Path fileToDeletePath = Paths.get("fileToDelete_jdk7.txt"); 
Files.delete(fileToDeletePath); 

Надеется, что это помогает.

17

На моей машине, я просто не могу сделать:

file.delete() 

, если файл не существует, он будет возвращать ложь.

0

Это должно сработать для вас.

File xx = new File("filename.txt"); 
    if (xx.exists()) { 
     xx.delete();  
    } 
0

Это мое решение:

File f = new File("file.txt"); 
if(f.exists() && !f.isDirectory()) { 
    f.delete(); 
} 
1

Я работал над этим типом функции, возможно, это интересы некоторых из вас ...

public boolean deleteFile(File file) throws IOException { 
    if (file != null) { 
     if (file.isDirectory()) { 
      File[] files = file.listFiles(); 

      for (File f: files) { 
       deleteFile(f); 
      } 
     } 
     return Files.deleteIfExists(file.toPath()); 
    } 
    return false; 
} 
Смежные вопросы