0

Я пытаюсь загрузить файл в память с базовой информацией, добавить строки и включить результат в Zip-файл. В C# существуют MemoryStream, но в java нет.Java - Загрузить файл в качестве шаблона + добавить содержимое в память и управлять байтом []

контекст моего приложения загружает файлы stylesheet.css с заранее определенными стилями для добавления других стилей, которые я получаю динамически. Позже я хочу добавить этот контент в zip-запись, и мне нужен байт [], который представляет этот контент.

На данный момент, у меня есть следующие строки, но я не знаю, как преобразовать это в байт []:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
File file = new File(classLoader.getResource("style.css").getFile()); 

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file)); 
BufferedWriter writer = new BufferedWriter(osw); 

Я попытался с ByteArrayOutputStream, но я не могу выполнили все мои требования.

Любая идея? im opne к другим идеям для моей цели. Я тоже ищу CSSParser, но я не видел, как я могу добавить контент и получить файл File (byte []) для добавления в мой zip-файл.

+0

Что значит "не выполнили все мои требования." ? Вы видите исключение? Затем разделите стек. Также читайте о том, как создать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve), чтобы люди здесь могли помочь вам – Ivan

+0

мои требования: 1. загрузить файл в память, 2. добавить динамически содержимое, также в памяти, 3. конвертировать в байт [] для добавления в zip-файл. –

ответ

0

Finnaly, я не нашел другого решения для своей проблемы, которое преобразует байты InputStream в ByteArrayOutputStream в байт.

Я создал следующие методы:

Загрузка шаблона файла в поток ввода и преобразования.

private ByteArrayOutputStream getByteArrayOutputStreamFor(String templateName) { 
    try { 
     ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
     InputStream inStream = classLoader.getResourceAsStream(templateName); //file into resources directory 
     ByteArrayOutputStream baos = Utils.toOutputStream(inStream); 

     return baos; 

    } catch (Exception e) { 
     String msg = String.format("erro to loaf filetemplate {%s}: %s", templateName, e.getMessage()); 
     throw new RuntimeException(msg, e.getCause()); 
    } 
} 

Скопируйте InputStream в ByteArrayOutputStream байт в байт

public static final ByteArrayOutputStream toOutputStream(InputStream inStream) { 
    try { 
     ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 

     int byteReads; 
     while ((byteReads = inStream.read()) != -1) { 
      outStream.write(byteReads); 
     } 

     outStream.flush(); 
     inStream.close(); 

     return outStream; 

    } catch (Exception e) { 
     throw new RuntimeException("error message"); 
    } 
} 

Наконец, я прилагаю текст ByteArrayOutputStream

ByteArrayOutputStream baosCSS = getByteArrayOutputStreamFor("templateName.css"); 
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(baosCSS)); 
writer.append("any text"); 
writer.flush(); 
writer.close(); 

byte[] bytes = baosCSS.toByteArray()