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");
}