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()
我正在尝试将包含基本信息的文件加载到内存中,附加行并将结果包含到 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()