2015-02-15 2 views
2

После обновления Java 7 Я получаю следующий код помечает Eclipse:Почему java.io.File не реализует Autocloseable?

try (File file = new File(FILE_NAME)) { 
     file.delete();   
    } 

Ошибка:

Тип ресурса файл не реализует java.lang.AutoCloseable

В документации Java нет файла, указанного в документах AutoCloseable: http://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html

Итак, добавив блок catch, какая из предложенных альтернатив?

+7

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

+1

Как вы думаете, 'close()' в файле должен делать и когда он должен использоваться? – Pshemo

+0

Вижу, ладонь! Упал жертвой идиотических соглашений об именах в библиотеке Java. Обнаружено это позже: http://stackoverflow.com/questions/4752266/why-java-io-file-doesnt-have-a-close-method –

ответ

4

Как сказал Джеффри в комментарии к вопросу, вам нужно провести различие между файлом и InputStream, например. FileInputStream. Ничего не нужно закрывать в файле, но есть что-то, что можно закрыть в потоке или читателе.

try (FileInputStream fs = new FileInputStream (new File(FILE_NAME))) { 
    // do what you want with the stream 
} 
+0

Вижу, к сожалению, они решили назвать это Файлом. Обычно мы ссылаемся на открытие и закрытие файла как часть нашего словарного запаса, но Java решила пойти против этого умственного представления. Это больше похоже на элемент каталога файлов, которому вы даны, чтобы манипулировать ... –

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