Нужно считать текстовый файл из потока, как это сделано с картинкой. Важно: считывание в ОП а не в файл. ZipInputStream zis; BufferedImage tmpImage; tmpImage = null; tmpImage = ImageIO.read(zis);
Ответ
Используя только классы из стандартной библиотеки Java, избежать циклов и прочего говнокода не получится никак. Имея произвольный InputStream, прочитать из него текст в виде строки можно следующим образом:
import java.nio.charset.Charset;
import java.io.*;
static public String readTextFromInputStream(InputStream in, Charset cs) {
StringBuilder text = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(in, cs));
String line = null;
String newline = System.getProperty("line.separator");
while ((line = reader.readLine()) != null) {
text.append(line);
text.append(newline);
}
return text.toString();
}
Где параметр cs означает предполагаемую кодировку текста. Использовать примерно так:
String text = readTextFromInputStream(in, Charset.forName("CP1251"));
Если хотите избежать всего этого говнокода, у вас два варианта: либо подключить внешние библиотеки (к примеру, Apache Commons IO), либо использовать нормальные языки для JVM, к примеру, Scala, в которой решение займет одну строку:
def readFromInputStream(in: InputStream, cs: Codec) =
Source.fromInputStream(in)(cs).mkString
Дополнение 1. Если хочется сохранить разбиение на строки, то модифицируем первоначальный вариант функции readFromInputStream следующим образом (так, чтобы она возвращала список строк):
import java.util.List;
import java.util.ArrayList;
static public List
Комментариев нет:
Отправить комментарий