Java - 将文件加载为模板 + 在内存中追加内容并管理字节 []

Java - Load file as Template + append content in memory and manage byte[]

我正在尝试将包含基本信息的文件加载到内存中,附加行并将结果包含到 Zip 文件中。在 C# 中存在 MemoryStream 但在 java 中不存在。

我的应用程序的上下文是加载一个具有预定义样式的 stylesheet.css 文件,以添加我动态获得的其他样式。稍后我想将此内容添加到一个 zip 条目,我需要一个表示此内容的字节[]。

目前,我有下一行,但我不知道如何将其转换为 byte[]:

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,但无法完成我的所有要求。

有什么想法吗?我愿意接受其他想法来实现我的目标。我也在寻找 CSSParser,但我没有看到,因为我可以附加内容并获取文件文档 (byte[]) 以添加到我的 zip 文件中。

最后,我没有找到将 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()