我想检查指定路径上是否存在任何 Zip 文件。如果存在,那么我想在同一路径上提取该文件。
如何检查给定路径上是否存在任何 Zip 文件?
您可以尝试使用此代码检查目录中文件的扩展名,并在存在 Zip 文件时打印文件名。
public static void main(String[] args)
{
// Directory path here
String path = ".";
String files;
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++)
{
if (listOfFiles[i].isFile())
{
files = listOfFiles[i].getName();
if (files.endsWith(".rar") || files.endsWith(".zip"))
{
System.out.println(files);
}
}
}
}
如果你想FilenameFilter
按照 Andrew Thompson 的说法使用,而不是那样。
你可以在你的类中实现 FilenameFilter。此链接提供了更多帮助。这样你就不需要检查文件的扩展名了。它只会给你那些扩展名作为参数传递的文件。
要提取 zip 文件(如果找到),您可以借助该ZipInputStream
包。您可以在这里查看以提取文件夹。
如何检查给定路径上是否存在任何 Zip 文件?
这将解压缩目录中的所有文件,但很容易修改为仅解压缩特定文件。
package com.wedgeless.stackoverflow;
import java.io.*;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
/**
* Unzips all zip files in a directory
* @author mk
*/
public final class Unzipper
{
public static final String DOT_ZIP = ".ZIP";
public static final FilenameFilter DOT_ZIP_FILTER = new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
return name.toUpperCase().endsWith(DOT_ZIP);
}
};
public static void main(String[] args)
{
File dir = new File("/path/to/dir");
Unzipper unzipper = new Unzipper();
unzipper.unzipDir(dir);
}
public void unzipDir(File dir)
{
for (File file : dir.listFiles(DOT_ZIP_FILTER))
{
unzip(file);
}
}
protected void unzip(File file)
{
File dir = getZipDir(file);
try
{
dir.mkdirs();
ZipFile zip = new ZipFile(file);
Enumeration<? extends ZipEntry> zipEntries = zip.entries();
while (zipEntries.hasMoreElements())
{
ZipEntry zipEntry = zipEntries.nextElement();
File outputFile = new File(dir, zipEntry.getName());
outputFile.getParentFile().mkdirs();
if (!zipEntry.isDirectory())
{
write(zip, zipEntry, outputFile);
}
}
}
catch (IOException e)
{
dir.delete();
}
}
protected void write(ZipFile zip, ZipEntry zipEntry, File outputFile)
throws IOException
{
final BufferedInputStream input = new BufferedInputStream(zip.getInputStream(zipEntry));
final int buffsize = 1024;
final byte buffer[] = new byte[buffsize];
final BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(outputFile), buffsize);
try
{
while (input.available() > 0)
{
input.read(buffer, 0, buffsize);
output.write(buffer, 0, buffsize);
}
}
finally
{
output.flush();
output.close();
input.close();
}
}
protected File getZipDir(File zip)
{
File dir = zip.getParentFile();
int index = zip.getName().toUpperCase().lastIndexOf(DOT_ZIP);
String zipPath = zip.getName().substring(0, index);
File zipDir = new File(dir, zipPath);
return zipDir;
}
}
在极少数情况下,当您在非标准情况下获得带有扩展名的 zip 文件时,也不会感到困惑,例如file.ZIP
编辑:我想我应该更仔细地阅读这个问题。您只问如何识别路径上是否存在 zip 文件,而不是如何提取它。只需使用 FilenameFilter 方法......如果你得到任何命中返回 true,否则返回 false。
获取一个文件变量并遍历director 中的所有文件并检查.zip 或.tar.gz 或.rar 如何在Java 中迭代某个目录的文件?
测试您想要使用的任何资源的可用性的最佳方法就是尝试使用它。任何其他技术都容易受到时序窗口问题、对您试图预测未来的批评、双重编码等的影响。等等。只要抓住FileNotFoundException
当您尝试打开它时发生的事情。无论如何你必须抓住它,为什么要写两次相同的代码?