Java中zip的壓縮和解壓縮的實(shí)現(xiàn)代碼
在Java中可以使用ZipOutputStream和ZipInputStream來實(shí)現(xiàn)zip的壓縮和解壓縮操作,另外使用FileSystem也可以用來實(shí)現(xiàn)zip的解壓縮,下面將介紹這幾種方式,直接上代碼。
zip壓縮待壓縮文件目錄結(jié)構(gòu):
每個zip文件項都要對應(yīng)一個ZipEntry,然后通過ZipOutputStream的putNextEntry方法開始寫入一個新的zip文件項,將文件數(shù)據(jù)發(fā)送到zip輸出流中,完成后再調(diào)用closeEntry方法。
@Testpublic void testCompressByZip() {try (//指定壓縮完成后zip文件的存儲路徑ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream('F:myFavorites.zip'))){//待壓縮文件/目錄所在的目錄File fileFolder = new File('F:我的收藏');//獲取目錄下的所有文件File[] files = fileFolder.listFiles();ZipEntry zipEntry;byte[] byteArray;int len;//遍歷目錄下的所有文件/目錄,并將它們添加到壓縮文件中for (File file : files) {//一個ZipEntry對應(yīng)壓縮文件中的一項zipEntry = new ZipEntry(file.getName());zipOutputStream.putNextEntry(zipEntry);try (FileInputStream in = new FileInputStream(file)) {byteArray = new byte[1024];while ((len = in.read(byteArray)) != -1) {zipOutputStream.write(byteArray, 0, len);}} catch (IOException ex) {ex.printStackTrace();}zipOutputStream.closeEntry();}} catch (IOException ex) {ex.printStackTrace();}}
壓縮結(jié)果:
遍歷zip文件中的所有項,并獲取對應(yīng)項的輸入流,然后通過FileOutputStream輸出到指定目錄中。
@Testpublic void testDecompressByZip() {try (//指定需要解壓縮的zip文件ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream('F:myFavorites.zip'))){ZipEntry zipEntry;byte[] byteArray;int len;//遍歷zip文件中的所有項,并逐個解壓到指定的目錄中while ((zipEntry = zipInputStream.getNextEntry()) != null) {try (FileOutputStream fileOutputStream = new FileOutputStream('F:我的解壓目錄' + zipEntry.getName())) {byteArray = new byte[1024];while ((len = zipInputStream.read(byteArray)) != -1) {fileOutputStream.write(byteArray, 0, len);}} catch (IOException ex) {ex.printStackTrace();}}} catch (IOException ex) {ex.printStackTrace();}}
解壓縮結(jié)果:
@Testpublic void testDecompressByZip2(){try {//將壓縮文件作為一個文件系統(tǒng)訪問FileSystem fileSystem = FileSystems.newFileSystem(Paths.get('F:myFavorites.zip'), null);//遍歷壓縮文件中的內(nèi)容,并使用文件訪問器訪問所有內(nèi)容Files.walkFileTree(fileSystem.getPath('/'), new SimpleFileVisitor<Path>() {@Overridepublic FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {System.out.println('訪問目錄中文件時調(diào)用');//將文件解壓到指定目錄Files.copy(file, new FileOutputStream('F:我的解壓目錄' + file.getName(file.getNameCount() - 1)));return FileVisitResult.CONTINUE;}@Overridepublic FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {System.out.println('訪問目錄中文件之前調(diào)用');return FileVisitResult.CONTINUE;}@Overridepublic FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {System.out.println('訪問目錄中文件失敗時調(diào)用');return FileVisitResult.SKIP_SUBTREE;}@Overridepublic FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {System.out.println('訪問目錄中的文件及其所有后代之后調(diào)用');return FileVisitResult.CONTINUE;}});} catch (IOException ex) {ex.printStackTrace();}}
到此這篇關(guān)于Java中zip的壓縮和解壓縮的實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)java zip壓縮和解壓縮內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. 告別AJAX實(shí)現(xiàn)無刷新提交表單2. 封裝一個vue中也可使用的uniapp的全局彈窗組件(任何頁面都可以彈出)3. css列表標(biāo)簽list與表格標(biāo)簽table詳解4. webpack高級配置與優(yōu)化詳解5. 阿里前端開發(fā)中的規(guī)范要求6. html小技巧之td,div標(biāo)簽里內(nèi)容不換行7. XML入門的常見問題(一)8. 低版本IE正常運(yùn)行HTML5+CSS3網(wǎng)站的3種解決方案9. 讀寫xml文件的2個小函數(shù)10. IE6/IE7/IE8/IE9中tbody的innerHTML不能賦值的完美解決方案
