FileUtils.listFilesAndDirs 的替代方案,不将子项列为单独的文件
Alternative to FileUtils.listFilesAndDirs that does not list children as separate files
我想将其他目录的一个目录打包成一个zip文件。这些其他目录分别包含一个文本文件和一个 PNG 文件。但是,FileUtils.listFilesAndDirs() 列出了这些目录及其子目录,并且在将它们打包成 zip 后,它会打包目录及其子目录,同时还会将子目录的副本打包到 zip 的根目录中。
zip 看起来像这样:
Class1
-Image1
-Text1
Class2
-Image2
-Text2
Class3
-Image3
-Text3
Image1
Text1
Image2
Text2
Image3
Text3
空行后面应该没有文件。是否有任何替代函数可以只列出目录及其子目录,而不单独列出子目录?
在我看来,使用 file/directory 过滤器和 ZipOutputStream
时有些误解。像这样的怎么样?
import java.io.*;
import java.util.Collection;
import java.util.zip.*;
import javax.swing.JPanel;
import org.apache.commons.io.*;
import org.apache.commons.io.filefilter.*;
public class Demo extends JPanel {
private static final long serialVersionUID = 1L;
public static void main(String s[]) throws Exception {
Demo demo = new Demo();
demo.launch();
}
private void launch() throws Exception {
Collection<File> fs = FileUtils.listFilesAndDirs(new File("/tmp/fakerepo"),
FileFileFilter.FILE, DirectoryFileFilter.DIRECTORY);
ZipOutputStream zos = null;
try {
zos = new ZipOutputStream(new FileOutputStream("/tmp/test.zip"));
for (File f : fs) {
System.out.println(f.getAbsolutePath());
if (!f.isFile())
continue;
ZipEntry ze = new ZipEntry(f.getAbsolutePath());
zos.putNextEntry(ze);
InputStream is = null;
try {
is = new FileInputStream(f);
IOUtils.copy(is, zos);
} finally {
IOUtils.closeQuietly(is);
}
}
zos.flush();
} finally {
IOUtils.closeQuietly(zos);
}
}
}
我想将其他目录的一个目录打包成一个zip文件。这些其他目录分别包含一个文本文件和一个 PNG 文件。但是,FileUtils.listFilesAndDirs() 列出了这些目录及其子目录,并且在将它们打包成 zip 后,它会打包目录及其子目录,同时还会将子目录的副本打包到 zip 的根目录中。
zip 看起来像这样:
Class1
-Image1
-Text1
Class2
-Image2
-Text2
Class3
-Image3
-Text3
Image1
Text1
Image2
Text2
Image3
Text3
空行后面应该没有文件。是否有任何替代函数可以只列出目录及其子目录,而不单独列出子目录?
在我看来,使用 file/directory 过滤器和 ZipOutputStream
时有些误解。像这样的怎么样?
import java.io.*;
import java.util.Collection;
import java.util.zip.*;
import javax.swing.JPanel;
import org.apache.commons.io.*;
import org.apache.commons.io.filefilter.*;
public class Demo extends JPanel {
private static final long serialVersionUID = 1L;
public static void main(String s[]) throws Exception {
Demo demo = new Demo();
demo.launch();
}
private void launch() throws Exception {
Collection<File> fs = FileUtils.listFilesAndDirs(new File("/tmp/fakerepo"),
FileFileFilter.FILE, DirectoryFileFilter.DIRECTORY);
ZipOutputStream zos = null;
try {
zos = new ZipOutputStream(new FileOutputStream("/tmp/test.zip"));
for (File f : fs) {
System.out.println(f.getAbsolutePath());
if (!f.isFile())
continue;
ZipEntry ze = new ZipEntry(f.getAbsolutePath());
zos.putNextEntry(ze);
InputStream is = null;
try {
is = new FileInputStream(f);
IOUtils.copy(is, zos);
} finally {
IOUtils.closeQuietly(is);
}
}
zos.flush();
} finally {
IOUtils.closeQuietly(zos);
}
}
}