Paths类结合FileSystem实现解压zip文件

来源:互联网 发布:cmd运行java文件 编辑:程序博客网 时间:2024/05/05 04:11

Paths类会在默认文件系统中查找路径,即在用户的本地磁盘中的文件,但是也可以有别的文件系统,比如ZIP文件系统

FileSystem的一些方法:
abstract Iterable getFileStores()
abstract Path getPath(String first, String… more)
abstract Iterable getRootDirectories()
abstract String getSeparator()
abstract boolean isOpen()
abstract boolean isReadOnly()
abstract FileSystemProvider provider()
abstract Set supportedFileAttributeViews()

存在的问题:只能遍历UTF-8格式,目前还不知道有什么方法设置编码格式
可以实现:对ZIP中文件的复制(等价解压)
解压ZIP到指定位置;

//1.解压zip文件public static void Unzip(String zipfile,String destDir) throws IOException {    Path path=Paths.get(zipfile);    final Path destPath=Paths.get(destDir);    if (Files.notExists(path)) {        throw new IOException("源文件不存在");    }    if (Files.notExists(destPath)) {        Files.createDirectories(destPath);    }    //获取ZIP文件系统,接受以 zip或jar结尾的文件    FileSystem fs=FileSystems.newFileSystem(Paths.get(zipfile),null);    //遍历所有的文件,默认只能遍历UTF-8格式的    Files.walkFileTree(fs.getPath("/"),new SimpleFileVisitor<Path>() {        //按官方例子来说,这里分开处理文件夹,感觉没有必要//      @Override//      public FileVisitResult preVisitDirectory(Path dir,//          BasicFileAttributes attrs) throws IOException {//          return null;}        @Override //处理文件        public FileVisitResult visitFile(Path file,            BasicFileAttributes attrs) throws IOException {        Path target=Paths.get(destPath.toString(), file.toString());        if (Files.notExists(target.getParent())) {        Files.createDirectories(target.getParent());        }        Files.copy(file, target);        return FileVisitResult.CONTINUE;        }    });    }     public static void main(String[] args) throws IOException{//  Unzip("D:/压缩/UTFtest.zip","D:/压缩/111/11");    }
0 0
原创粉丝点击