zip4j+压缩报错+input+file+does+not+exist
时间: 2024-03-31 21:29:10 浏览: 218
zip4j是一个用于处理zip文件的Java库。它提供了压缩和解压缩文件的功能。当使用zip4j进行压缩操作时,如果出现"input file does not exist"的错误,意味着指定的输入文件不存在。
这个错误通常是由以下几个原因引起的:
1. 文件路径错误:请确保输入文件的路径是正确的,并且文件确实存在于指定的路径中。
2. 文件名错误:请检查输入文件的文件名是否正确,包括文件名的大小写。
3. 文件权限问题:如果输入文件位于受限制的目录中,可能会导致无法访问该文件。请确保您具有足够的权限来读取该文件。
解决这个问题的方法是:
1. 检查输入文件的路径和文件名是否正确。
2. 确保输入文件存在于指定的路径中。
3. 检查您是否具有足够的权限来读取该文件。
相关问题
Apache Commons Compress 实现zip文件分卷压缩代码示例
### 回答1:
以下是使用 Apache Commons Compress 库实现zip文件分卷压缩的示例代码:
```java
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.utils.IOUtils;
public class ZipUtils {
public static void zipSplit(File inputFile, int splitSize) throws IOException {
BufferedInputStream bis = null;
FileInputStream fis = null;
ZipArchiveOutputStream zos = null;
try {
fis = new FileInputStream(inputFile);
bis = new BufferedInputStream(fis);
byte[] buffer = new byte[1024];
int read = 0;
int partNum = 0;
while ((read = bis.read(buffer)) != -1) {
String partName = inputFile.getName() + ".part" + partNum + ".zip";
File partFile = new File(inputFile.getParentFile(), partName);
ZipArchiveEntry zipEntry = new ZipArchiveEntry(inputFile.getName());
zipEntry.setSize(read);
zos = new ZipArchiveOutputStream(new BufferedOutputStream(new FileOutputStream(partFile)));
zos.putArchiveEntry(zipEntry);
zos.write(buffer, 0, read);
zos.closeArchiveEntry();
zos.close();
partNum++;
}
} finally {
IOUtils.closeQuietly(bis);
IOUtils.closeQuietly(fis);
IOUtils.closeQuietly(zos);
}
}
}
```
此示例使用 `ZipArchiveOutputStream` 类创建分卷 zip 文件,并将输入文件分割成固定大小的块。在此示例中,文件将被分割成大小为 `splitSize` 的块。
示例中的 `zipSplit` 方法接受两个参数:`inputFile`,它是要分卷压缩的文件,以及 `splitSize`,它是每个分卷文件的大小。
请注意,此示例仅创建 zip 文件的分卷,而不进行解压缩或合并。如果要解压或合并分卷 zip 文件,请使用 `ZipArchiveInputStream` 类。
### 回答2:
Apache Commons Compress 是一个用于处理各种压缩和存档格式的 Java 库。它提供了一系列实用程序和类,用于创建、读取和操作各种压缩格式的文件。
下面是一个使用 Apache Commons Compress 实现 zip 文件分卷压缩的代码示例:
```java
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import java.io.*;
public class ZipVolumeExample {
private static final int CHUNK_SIZE = 1024 * 1024; // 每个分卷的大小设置为1MB
public static void main(String[] args) {
String sourceFilePath = "path/to/source/file.txt";
String destinationFolderPath = "path/to/destination/folder";
String destinationBaseFileName = "output";
File sourceFile = new File(sourceFilePath);
File destinationFolder = new File(destinationFolderPath);
if (!sourceFile.exists()) {
System.out.println("Source file does not exist!");
return;
}
if (!destinationFolder.exists() || !destinationFolder.isDirectory()) {
System.out.println("Destination folder does not exist!");
return;
}
try (InputStream inputStream = new FileInputStream(sourceFile)) {
int volumeCount = 1;
int bytesRead;
byte[] buffer = new byte[CHUNK_SIZE];
ZipArchiveOutputStream zipOutputStream = null;
while ((bytesRead = inputStream.read(buffer)) > 0) {
String volumeFileName = String.format("%s_%03d.zip", destinationBaseFileName, volumeCount++);
File volumeFile = new File(destinationFolder, volumeFileName);
zipOutputStream = new ZipArchiveOutputStream(new FileOutputStream(volumeFile));
ZipArchiveEntry zipEntry = new ZipArchiveEntry(sourceFile.getName());
zipOutputStream.putArchiveEntry(zipEntry);
zipOutputStream.write(buffer, 0, bytesRead);
zipOutputStream.closeArchiveEntry();
zipOutputStream.close();
}
if (zipOutputStream != null) {
zipOutputStream.close();
}
System.out.println("Zip volume compression completed!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
上述代码示例中,我们通过指定源文件路径和目标文件夹路径来定义要进行分卷压缩的文件以及输出文件夹。代码中的 CHUNK_SIZE 变量定义了每个分卷的大小,这里设置为 1MB。然后,我们通过循环读取源文件,并将数据写入分卷的 zip 文件中。
在循环过程中,我们使用 ZipArchiveOutputStream 类创建一个新的 zip 输出流,并将源文件的内容写入到该流中。每当达到 CHUNK_SIZE 大小时,我们就关闭当前的分卷 zip 文件,并为下一个分卷创建一个新的 zip 输出流。最后,我们在循环结束后关闭输出流。
通过使用 Apache Commons Compress 提供的 ZipArchiveOutputStream 类,我们能够轻松实现 zip 文件的分卷压缩。这种方法可以将大型文件分割成多个块,方便传输和存储。
### 回答3:
Apache Commons Compress是一个开源的Java库,用于处理各种压缩和解压缩格式的文件。它提供了丰富的功能,包括对zip文件的创建、更新、解压缩等操作。以下是一个使用Apache Commons Compress实现zip文件分卷压缩的代码示例:
```java
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ZipSplitExample {
public static void main(String[] args) throws IOException {
String inputFilePath = "path/to/input/file.zip";
String outputDirectory = "path/to/output/directory/";
int maxFileSize = 10 * 1024 * 1024; // 10 MB
File inputFile = new File(inputFilePath);
FileInputStream fis = new FileInputStream(inputFile);
byte[] buffer = new byte[maxFileSize];
int partNum = 1;
int bytesRead;
while ((bytesRead = fis.read(buffer)) > 0) {
String outputFilePath = outputDirectory + "part" + partNum + ".zip";
FileOutputStream fos = new FileOutputStream(outputFilePath);
ZipArchiveOutputStream zipOutput = new ZipArchiveOutputStream(fos);
ZipArchiveEntry entry = new ZipArchiveEntry("part" + partNum + ".bin");
zipOutput.putArchiveEntry(entry);
zipOutput.write(buffer, 0, bytesRead);
zipOutput.closeArchiveEntry();
zipOutput.finish();
zipOutput.close();
fos.close();
partNum++;
}
fis.close();
}
}
```
上述代码中,首先需要指定输入的zip文件路径(inputFilePath),以及输出分卷压缩文件的目录(outputDirectory)。参数maxFileSize用于指定每个分卷的最大文件大小(此处设置为10MB)。
代码会从输入zip文件中读取数据,并按照每个分卷的最大文件大小将数据写入到输出文件中。每个分卷的文件名通过添加后缀"part"和分卷编号来表示。
需要注意的是,代码中虽然只演示了对zip文件的分卷压缩操作,但Apache Commons Compress还提供了丰富的其他功能,如解压缩、添加、删除文件等操作,可以根据具体需求进行调整。
windows下通过qt使用zlib将文件夹压缩成zip格式,并且能解析
可以使用Qt的QZipWriter和QZipReader类来实现文件夹压缩和解压缩。
以下是一个简单的示例代码,演示如何使用QZipWriter将文件夹压缩成zip格式,并使用QZipReader解压缩:
```cpp
#include <QDir>
#include <QFile>
#include <QByteArray>
#include <QZipWriter>
#include <QZipReader>
void compressFolder(const QString& folderPath, const QString& zipFilePath)
{
QDir folder(folderPath);
if (!folder.exists()) {
qWarning("Folder does not exist: %s", qPrintable(folderPath));
return;
}
QFile zipFile(zipFilePath);
if (!zipFile.open(QIODevice::WriteOnly)) {
qWarning("Could not create zip file: %s", qPrintable(zipFilePath));
return;
}
QZipWriter zipWriter(&zipFile);
QDir::setCurrent(folderPath); // 设置当前目录为要压缩的文件夹,以便获取相对路径
QStringList files = folder.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
for (const QString& file : files) {
QString filePath = folderPath + QDir::separator() + file;
QString relativePath = folder.relativeFilePath(filePath); // 获取相对路径
if (QFileInfo(filePath).isDir()) {
zipWriter.addDirectory(relativePath);
compressFolder(filePath, zipFilePath + QDir::separator() + file); // 递归压缩子文件夹
} else {
QFile inputFile(filePath);
if (inputFile.open(QIODevice::ReadOnly)) {
QByteArray fileData = inputFile.readAll();
zipWriter.addFile(relativePath, fileData);
}
}
}
}
void decompressFolder(const QString& zipFilePath, const QString& folderPath)
{
QFile zipFile(zipFilePath);
if (!zipFile.open(QIODevice::ReadOnly)) {
qWarning("Could not open zip file: %s", qPrintable(zipFilePath));
return;
}
QZipReader zipReader(&zipFile);
if (!zipReader.exists()) {
qWarning("Invalid zip file: %s", qPrintable(zipFilePath));
return;
}
QDir folder(folderPath);
if (!folder.exists()) {
folder.mkpath(".");
}
QDir::setCurrent(folderPath); // 设置当前目录为要解压缩到的文件夹,以便创建相对路径
QList<QZipReader::FileInfo> files = zipReader.fileInfoList();
for (const QZipReader::FileInfo& fileInfo : files) {
QString filePath = folderPath + QDir::separator() + fileInfo.filePath;
if (fileInfo.isDir()) {
folder.mkpath(filePath);
} else {
QFile outputFile(filePath);
if (outputFile.open(QIODevice::WriteOnly)) {
QByteArray fileData = zipReader.fileData(fileInfo.filePath);
outputFile.write(fileData);
}
}
}
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QString folderPath = "C:/Users/User/Desktop/test";
QString zipFilePath = "C:/Users/User/Desktop/test.zip";
compressFolder(folderPath, zipFilePath);
decompressFolder(zipFilePath, folderPath + "_unzip");
return app.exec();
}
```
以上代码将文件夹"C:/Users/User/Desktop/test"压缩成"test.zip"文件,并将其解压缩到"C:/Users/User/Desktop/test_unzip"文件夹中。注意,在Windows下,文件路径分隔符应使用反斜杠"\"而不是正斜杠"/"。
阅读全文