今天遇到个bug,在导出数据打成zip包的时候,在本机(xp)上成功,在服务器(linux)上报异常,
异常如下:ZIP file must have at least one entry。
上网查了,但是更多的是关于路径名有中文的问题,但是我在本机和服务器上都是英文目录,以下是我
的部分代码:
/**
* Creates a Zip archive. If the name of the file passed in is a directory,
* the directory's contents will be made into a Zip file.
*/
public static String makeZip(String fileName) throws IOException,
FileNotFoundException {
File file = new File(fileName);
ZipOutputStream zos = null;
try {
zos = new ZipOutputStream(new FileOutputStream(file + ".zip"));
// Call recursion.
recurseFiles(file, zos);
} finally {
if (null != zos) {
zos.close();
}
}
return file + ".zip";
}
private static void recurseFiles(File file, ZipOutputStream zos)
throws IOException, FileNotFoundException {
if (file.isDirectory()) {
// Create an array with all of the files and subdirectories
// of the current directory.
String[] fileNames = file.list();
if (fileNames != null) {
// Recursively add each array entry to make sure that we get
// subdirectories as well as normal files in the directory.
for (int i = 0; i < fileNames.length; i++) {
recurseFiles(new File(file, fileNames[i]), zos);// 给子目录里的文件打包!!
}
}
}
// Otherwise, a file so add it as an entry to the Zip file.
else {
byte[] buf = new byte[1024];
int len;
// Create a new Zip entry with the file's name.
ZipEntry zipEntry = new ZipEntry(file.getName());
// Create a buffered input stream out of the file
// we're trying to add into the Zip archive.
FileInputStream fin = new FileInputStream(file);
BufferedInputStream in = new BufferedInputStream(fin);
zos.putNextEntry(zipEntry);
// Read bytes from the file and write into the Zip archive.
while ((len = in.read(buf)) >= 0) {
zos.write(buf, 0, len);
}
// Close the input stream.
in.close();
// Close this entry in the Zip stream.
zos.closeEntry();
}
}
相关推荐
下面是一个简化的示例代码片段,演示了如何使用Java将文件或目录打包成ZIP: ```java import java.io.*; import java.util.zip.*; public class ZipHelper { public static void createZipFile(String sourcePath...
java大作业:简单的FlappyBird游戏.zipjava大作业:简单的FlappyBird游戏.zip java大作业:简单的FlappyBird游戏.zipjava大作业:简单的FlappyBird游戏.zip java大作业:简单的FlappyBird游戏.zipjava大作业:简单的...
ZIP是一种广泛使用的文件压缩格式,Java提供了一套完整的API来处理ZIP文件,使得我们可以方便地进行打包和解压操作。以下是对这个主题的详细讲解: 一、Java打包压缩ZIP Java中的`java.util.zip`包提供了对ZIP文件...
java课程设计:基于springBoot的家教管理系统.zip java课程设计:基于springBoot的家教管理系统.zip java课程设计:基于springBoot的家教管理系统.zip java课程设计:基于springBoot的家教管理系统.zip java课程设计...
java课程设计:基于java实现的单机五子棋游戏的源代码.zip java课程设计:基于java实现的单机五子棋游戏的源代码.zip java课程设计:基于java实现的单机五子棋游戏的源代码.zip java课程设计:基于java实现的单机...
综上所述,Java中实现Zip打包通常涉及创建`ZipOutputStream`,然后为每个要打包的文件或目录创建`ZipEntry`并写入。如果需要提高性能,可以考虑单独处理每个文件,而不是一次性打包整个文件夹。此外,还可以利用Ant...
在使用Apache Tomcat服务器时,有时会遇到启动异常的情况,其中一种常见的错误是`java.util.zip.ZipException`。这个异常通常表明在处理ZIP或JAR文件时遇到了问题,可能是因为文件损坏、格式不正确或者无法打开。在...
java课程设计:基于java实现的中国象棋游戏-支持局域网联机对战.zip java课程设计:基于java实现的中国象棋游戏-支持局域网联机对战.zip java课程设计:基于java实现的中国象棋游戏-支持局域网联机对战.zip java课程...
在Java编程环境中,将多个Excel文件打包成ZIP文件并实现下载功能是一项常见的需求,尤其是在数据导出或批量处理场景中。下面将详细讲解这个过程涉及的主要知识点。 首先,我们需要了解Java中的`java.util.zip`包,...
Java安卓:猜地鼠游戏.zipJava安卓:猜地鼠游戏.zipJava安卓:猜地鼠游戏.zip Java安卓:猜地鼠游戏.zipJava安卓:猜地鼠游戏.zipJava安卓:猜地鼠游戏.zip Java安卓:猜地鼠游戏.zipJava安卓:猜地鼠游戏.zipJava...
java八股文:Java实现八股文编程.zip java八股文:Java实现八股文编程.zip java八股文:Java实现八股文编程.zip java八股文:Java实现八股文编程.zip java八股文:Java实现八股文编程.zip java八股文:Java实现八股...
ZipEntry zipEntry = new ZipEntry(path + file.getName()); zos.putNextEntry(zipEntry); zos.write(bytes); zos.closeEntry(); } } } ``` 在这个例子中,`zipFiles`方法接受一个文件名数组和目标ZIP文件名...
这个压缩包文件"Java源码:Java zip压缩包查看程序源码.rar"包含的是一个使用Java实现的程序,能够查看和操作ZIP压缩包。下面将详细探讨Java在处理ZIP文件格式时涉及的关键知识点。 1. ZIP文件格式:ZIP是一种常见...
在Java编程环境中,打包文件或文件夹是一项常见的任务,特别是在软件开发过程中,我们需要将源代码、资源文件等打包成一个可分发的格式,如.zip。在这个场景中,我们使用了Java来实现文件夹的打包功能,并且依赖了...
本篇将深入讲解如何使用Java实现将文件打包成ZIP的过程,主要围绕"zipJava.zip"中的核心源码文件"ZipWriter.java"展开。 首先,我们需要了解Java的`java.util.zip`包,这个包提供了处理ZIP文件的类,如`...
为了实现ZIP文件的加密,我们需要依赖第三方库,例如Apache Commons Compress或者Java 7及以上版本引入的`java.nio.file`和`java.util.zip`中的`ZipFile`和`ZipEntry`类。 对于ZIP 2.0加密,Apache Commons ...
在Java编程语言中,`java.util.zip` 是一个非常重要的包,它提供了处理各种压缩格式(如ZIP和GZ)的工具。在这个场景中,我们将深入探讨如何使用这个包来解压缩和压缩ZIP格式的文件。`java.util.zip` 包包含几个关键...
因项目需求,需要在线生成world文档,并且需要批量生成world,那么就可以用zip打包所有world进行下载,这里提供的是一个简单的demo,如需了解在线生成文件,并打包到zip,可以问我
`java.util.zip`包提供了几个关键类,如`ZipEntry`、`ZipFile`、`ZipOutputStream`和`ZipInputStream`,它们分别用于表示ZIP文件中的条目、读取ZIP文件、写入ZIP文件和从ZIP文件中读取数据。 1. **ZipEntry**: 这个...
xlFile, err := xlsx.OpenFile(excelFileName) if err != nil { ... } for _, sheet := range xlFile.Sheets { for _, row := range sheet.Rows { for _, cell := ...