#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, вероятно, подготовлены для подобных ситуаций, подобных этой. Это может быть полезно, если источник файла отключается во время выполнения.
Поправьте меня, если я ошибаюсь, я не профессиональный программист.