Потоки.InputStream.Java.Как работать с данными

419
28 ноября 2017, 22:22

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

Что пробовал:

ZipFile zf=new ZipFile("src/pack/text.zip") //загружал архив
Enumeration entries = zf.entries()//собирал список файлов
while(entries.hasMoreElements()) { //проходил по всем элементам архива
    ZipEntry entry=(ZipEntry)entries.nextElement();//брал отдельный файл
    InputStream stream=new InputStream()//создавал поток
    stream=zf.getInputStream(entry);//пихал туда отдельный файл

Хотелось бы узнать, что записывается в потоки, только внутреннее файла?

Как дальше пользоваться записанными данными в поток?, т.е. как потом записать например в строку содержимое файла.
Читал о преобразованиях байтов, мало понятно, надо колдовать с кодировками
Чайник будет рад любой помощи

Answer 1

Основные шаги работы с потоками в Java: открыть поток на чтение/запись, прочитать его содержимое или записать нечто в поток, закрыть поток. Для более удобного чтения текстовых файлов InputStream с содержимым файла обычно оборачивают в BufferedReader или Scanner. Посмотрите пример чтения текстового файла на Java.

А вот так можно стандартными средствами Java получить содержимое InputStream целиком в виде строки:

private static String convertStreamToString(java.io.InputStream is) {
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
}

Этот трюк заимствован из статьи "Stupid Scanner tricks". Его работа основана на том, что Scanner проходит по всему потоку разделяя его на части используя как разделитель "начало границы входного потока" ("beginning of the input boundary", \A), т.е. возвращает всё содержимое потока одним куском.

Обратите внимание, что можно указать используемую кодировку входного потока вторым аргументом в конструкторе Scanner (например, "UTF-8").

READ ALSO
Не срабатывает timeout в Completable.fromAction()

Не срабатывает timeout в Completable.fromAction()

Добрый деньСтолкнулся с ошибкой, что при блокирующем ожидании завершения работы Completable, созданного при помощи

235
Разбиение чисел на цифры

Разбиение чисел на цифры

Сосчитать сумму цифр, при этом умножая каждую цифру на её порядковый номер (позицию) в числе, считая слева, начиная с единицыНапример 1567 - получается...

318
Формат вывода числа в Apache POI

Формат вывода числа в Apache POI

У меня есть такие настройки для записи информации в строку

270
Реализовать поиск по списку

Реализовать поиск по списку

Доброго времени суток! Помогите пожалуйста реализовать поиск по спискуДве недели мучаюсь!

354