複数の小さなファイルを読み取り、それらをより大きな単一のファイルに追加する必要があります。
Base64OutputStream baos = new Base64OutputStream(new FileOutputStream(outputFile, true));
for (String fileLocation : fileLocations) {
InputStream fis = null;
try
{
fis = new FileInputStream(new File(fileLocation));
int bytesRead = 0;
byte[] buf = new byte[65536];
while ((bytesRead=fis.read(buf)) != -1) {
if (bytesRead > 0) baos.write(buf, 0, bytesRead);
}
}
catch (Exception e) {
logger.error(e.getMessage());
}
finally{
try{
if(fis != null)
fis.close();
}
catch(Exception e){
logger.error(e.getMessage());
}
}
}
すべて非常に標準的ですが、入力ファイルごとに新しいbaosを開かない限り(ループ内に含める)、baosによって書き込まれた最初のファイルに続くすべてのファイルが間違っていることがわかりました(誤った出力)。
質問:
- 同じリソースに対して出力ストリームを開いたり閉じたりするのは良い習慣ではないと言われましたが、なぜですか?
- 単一の出力ストリームを使用しても、複数の別々のストリームを使用した場合と同じ結果が得られないのはなぜですか?