我有排列在不同目录中的文件列表,某些目录中会有子目录和文件。我无法成功地将相同的目录结构放入 zip 文件中。这是我的代码:
fun zipAll(directory: String, zipFile: String) {
val sourceFile = File(directory)
ZipOutputStream(BufferedOutputStream(FileOutputStream(zipFile))).use {
zipFiles(it, sourceFile)
}
}
private fun zipFiles(zipOut: ZipOutputStream, directory: File) {
val data = ByteArray(1024)
zipOut.use {
if (directory.isDirectory) {
//Adding directory
it.putNextEntry(ZipEntry(directory.name))
} else {
zipFiles(zipOut, directory)
}
for (f in directory.listFiles()) {
if (!f.name.contains(".zip") && f.exists()) {
//Adding file
FileInputStream(f).use { fi ->
BufferedInputStream(fi).use { origin ->
val entry = ZipEntry(f.name)
it.putNextEntry(entry)
while (true) {
val readBytes = origin.read(data)
if (readBytes == -1) …Run Code Online (Sandbox Code Playgroud) 以下是一些代码的一部分.我需要在finally子句中关闭资源.我需要先调用closeEntry()还是close()?我收到一些错误消息.
Error closing the zipoutjava.io.IOException: Stream closed at
java.util.zip.ZipOutputStream.ensureOpen(ZipOutputStream.java:70) at
java.util.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:189)
Run Code Online (Sandbox Code Playgroud)
代码
ZipOutputStream zos = null;
try{
ZipEntry entry = new ZipEntry("file.csv")
zipout.putNextEntry(entry);
csvBeanWriter = new CsvBeanWriter(writer,
CsvPreference.STANDARD_PREFERENCE);
csvBeanWriter.writeHeader(header);
for (Book book : bookList) {
csvBeanWriter.write(book, header);
csvBeanWriterTest.write(book, header);
}
} catch (Exception e) {
logger.error("Export of package data failed: "
+ e);
} finally {
if (zipout != null) {
try {
zos.closeEntry();
zos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
logger.error("Error closing the zos"
+ …Run Code Online (Sandbox Code Playgroud)