无法使用java制作文件夹来压缩文件?

这里我有Books文件夹里面的文件夹(Books)结构我有文件夹叫做物理,化学,科学,英语。我传给Books文件夹作为zipDeleteFile但是里面的所有文件夹都必须转换成物理文件夹(Books)和physics.zip ,chemistry.zip,science.zip,english.zip。但这段代码不起作用。

public void foldertToZip(File zipDeleteFile) { //System.out.println(zipDeleteFile); File directoryToZip = zipDeleteFile; List fileList = new ArrayList(); //System.out.println("---Getting references to all files in: " + directoryToZip.getCanonicalPath()); getAllFiles(directoryToZip, fileList); //System.out.println("---Creating zip file"); writeZipFile(directoryToZip, fileList); //System.out.println("---Done"); } public static void getAllFiles(File dir, List fileList) { try { File[] files = dir.listFiles(); for (File file : files) { fileList.add(file); if (file.isDirectory()) { System.out.println("directory:" + file.getCanonicalPath()); getAllFiles(file, fileList); } else { System.out.println(" file:" + file.getCanonicalPath()); } } } catch (IOException e) { e.printStackTrace(); } } public static void writeZipFile(File directoryToZip, List fileList) { try { try (FileOutputStream fos = new FileOutputStream(directoryToZip.getName() + ".zip")) { ZipOutputStream zos = new ZipOutputStream(fos); for (File file : fileList) { if (!file.isDirectory()) { // we only zip files, not directories addToZip(directoryToZip, file, zos); } } zos.close(); } } catch (FileNotFoundException e) { } catch (IOException e) { } } public static void addToZip(File directoryToZip, File file, ZipOutputStream zos) throws FileNotFoundException, IOException { try (FileInputStream fis = new FileInputStream(file)) { String zipFilePath = file.getCanonicalPath().substring(directoryToZip.getCanonicalPath().length() + 1, file.getCanonicalPath().length()); System.out.println("Writing '" + zipFilePath + "' to zip file"); ZipEntry zipEntry = new ZipEntry(zipFilePath); zos.putNextEntry(zipEntry); byte[] bytes = new byte[1024]; int length; while ((length = fis.read(bytes)) >= 0) { zos.write(bytes, 0, length); } zos.closeEntry(); } }`' 

最初我将zipDeleteFile传递为C:\ Books在Books中我拥有所有物理,英语,科学文件夹,这些文件夹必须在同一根文件夹(Books)中转换为zip文件。

所以,基本上,你想将Books文件夹中的每个目录压缩成自己的zip文件。 有几种方法可以做到这一点,但最简单的方法可能是改变你调用foldertToZip

所以,而不是(类似的东西)……

 foldertToZip(new File("C:\\Books")); 

你可以做点什么……

 for (File file : new File("C:\\Books").listFiles()) { if (file.isDirectory()) { foldertToZip(file); } } 

这将导致Books中的每个目录都被添加到它自己的zip文件中,该文件将驻留在Books

您可能需要做出的另一项改变是……

 public static void writeZipFile(File directoryToZip, List fileList) { try { //try (FileOutputStream fos = new FileOutputStream(directoryToZip.getName() + ".zip")) { File path = directoryToZip.getParentFile(); File zipFile = new File(path, directoryToZip.getName() + ".zip"); try (FileOutputStream fos = new FileOutputStream(zipFile)) { 

这将在要压缩的目录的父目录中创建zip文件(即Books目录)