求你了解一下😣 无需解压,java压缩包里重命名单个文件名就行了,不是循环重命名全部文件名
1条回答 默认 最新
小P聊技术 2021-06-01 10:44关注import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.FileSystem; import java.nio.file.FileSystems; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; protected void rezip( String zipfile, String olddir, String newdir ) { Path zipFilePath = Paths.get( zipfile ); try (FileSystem fs = FileSystems.newFileSystem( zipFilePath, null )) { Path oldpathInsideZipPath = fs.getPath( olddir ); if( ! Files.exists( Paths.get( newdir ) ) ) Files.createDirectory( Paths.get( newdir ) ); if ( Files.exists( oldpathInsideZipPath, LinkOption.NOFOLLOW_LINKS ) ) { Files.walkFileTree(oldpathInsideZipPath, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { if( file.toString().indexOf( olddir ) > -1 ){ String a = file.toString().replaceAll( olddir, newdir ); Path b = fs.getPath( a ); if( ! Files.exists( b.getParent() ) ){ Files.createDirectories( b.getParent() ); } Files.move( file, b, LinkOption.NOFOLLOW_LINKS ); } return FileVisitResult.CONTINUE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException e) throws IOException { if (e == null) { Files.delete(dir); return FileVisitResult.CONTINUE; } else { // directory iteration failed throw e; } } }); } fs.close(); } catch ( Exception e ) { e.printStackTrace(); } }评论 打赏 举报解决 1无用