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