В Java чтение файла с использованием inputstream после удаления файла

#java #io #inputstream

#java #io #inputstream

Вопрос:

У меня есть вопрос относительно чтения файлов в java. Вот пример кода

 File path = new File("myfile.txt");
InputStream inputStream = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
file.delete();                
String line;
while((line = reader.readLine()) != null) {
    System.out.println(line);
}
  

Я создаю входной поток и пытаюсь его прочитать. Как говорится, это похоже на канал, вы читаете значения байт за байтом.
Чтобы ускорить это, мы можем использовать BufferedReader, который может читать фрагмент за фрагментом.
Итак, я удаляю этот файл перед чтением.
Теперь, когда я его читаю, он по-прежнему считывает полный файл, даже если file там нет.
Если InputStream является каналом, почему он не завершается сбоем? Есть идеи?

Комментарии:

1. Вы не реагируете на возвращенный boolean из delete вызова. Скорее всего, это false указывает на то, что файл не был удален. Причина, скорее всего, в том, что, открывая входной поток из этого файла, вы все еще удерживаете его дескриптор.

Ответ №1:

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

Комментарии:

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

Ответ №2:

На мой взгляд, файл все еще существует в reader и InputStream. Удаление исходного файла ничего не изменит, пока вы не запустите приложение повторно.
Классы BufferedReader и InputStream, вероятно, подготовлены для подобных ситуаций, подобных этой. Это может быть полезно, если источник файла отключается во время выполнения.
Поправьте меня, если я ошибаюсь, я не профессиональный программист.