我试图压缩一个子文件夹并获得一个流关闭的异常
private static void zipSubFolder(ZipOutputStream out, File folder, int basePathLength) throws IOException{
final int BUFFER = 2048;
File[] fileList = folder.listFiles();
BufferedInputStream origin = null;
for (File file : fileList) {
if (file.isDirectory()) {
zipSubFolder(out, file, basePathLength);
} else {
byte[] data = new byte[BUFFER];
String unmodifiedFilePath = file.getPath();
String relativePath = unmodifiedFilePath
.substring(basePathLength);
try (FileInputStream fi = new FileInputStream(unmodifiedFilePath)) {
origin = new BufferedInputStream(fi, BUFFER);
}
ZipEntry entry = new ZipEntry(relativePath);
entry.setTime(file.lastModified()); // to keep modification time after unzipping
out.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
}
origin.close();
}
}
}获得一行错误: while (计数=origin.read(数据,0,缓冲区)) != -1)
: java.io.IOException: Stream Closed
at java.io.FileInputStream.read(FileInputStream.java:313)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)发布于 2022-02-03 21:27:29
当您离开{}括号时,try资源语句将立即关闭FileInputStream fi。尝试将整个代码放入try资源括号中。
来自java : BufferedInputStream向另一个输入流添加功能,即缓冲输入和支持标记和重置方法的能力。创建BufferedInputStream时,将创建内部缓冲区数组。当读取或跳过流中的字节时,内部缓冲区将根据需要从包含的输入流中重新填充,一次填充多个字节。标记操作记住输入流中的点,而重置操作使自最近的标记操作后读取的所有字节在从所包含的输入流中提取新字节之前重新读取。
https://stackoverflow.com/questions/70977711
复制相似问题