国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java解壓RAR文件的幾種方式

這篇具有很好參考價(jià)值的文章主要介紹了Java解壓RAR文件的幾種方式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

第一種:

public class fileZipUtil {
	/**
	 * zip文件解壓
	 * @param inputFile  待解壓文件夾/文件
	 * @param destDirPath  解壓路徑
	 */
	public static void unZipFiles(String inputFile,String destDirPath) throws Exception {
		File srcFile = new File(inputFile);//獲取當(dāng)前壓縮文件
		// 判斷源文件是否存在
		if (!srcFile.exists()) {
			throw new Exception(srcFile.getPath() + "所指文件不存在");
		}
		ZipFile zipFile = new ZipFile(srcFile, Charset.forName("GBK"));//創(chuàng)建壓縮文件對(duì)象
		//開始解壓
		Enumeration<?> entries = zipFile.entries();
		while (entries.hasMoreElements()) {
			ZipEntry entry = (ZipEntry) entries.nextElement();
			// 如果是文件夾,就創(chuàng)建個(gè)文件夾
			if (entry.isDirectory()) {
				String dirPath = destDirPath + "/" + entry.getName();
				srcFile.mkdirs();
			} else {
				// 如果是文件,就先創(chuàng)建一個(gè)文件,然后用io流把內(nèi)容copy過去
				File targetFile = new File(destDirPath + "/" + entry.getName());
				// 保證這個(gè)文件的父文件夾必須要存在
				if (!targetFile.getParentFile().exists()) {
					targetFile.getParentFile().mkdirs();
				}
				targetFile.createNewFile();
				// 將壓縮文件內(nèi)容寫入到這個(gè)文件中
				InputStream is = zipFile.getInputStream(entry);
				FileOutputStream fos = new FileOutputStream(targetFile);
				int len;
				byte[] buf = new byte[1024];
				while ((len = is.read(buf)) != -1) {
					fos.write(buf, 0, len);
				}
				// 關(guān)流順序,先打開的后關(guān)閉
				fos.close();
				is.close();
			}
		}
	}

	/**
	 * 解壓RAR壓縮文件到指定路徑
	 * @param rarFile RAR壓縮文件
	 * @param dstDir 解壓到的文件夾路徑
	 */
	public static void unRarFile(String rarPath, String dstDir) throws Exception {

		File dstDiretory = new File(dstDir);
		if (!dstDiretory.exists()) {
			dstDiretory.mkdirs();
		}
		try {
			File rarFile= new File(rarPath);
			Archive archive = new Archive(new FileInputStream(rarFile));
			List<FileHeader> fileHeaders = archive.getFileHeaders();
			for (FileHeader fileHeader : fileHeaders) {
				if (fileHeader.isDirectory()) {
					 String fileName=  fileHeader.getFileNameW();
					if(!existZH(fileName)){
						fileName = fileHeader.getFileNameString();
					}
					File dir = new File(dstDir + File.separator + fileName);
					if (!dir.exists()){
						dir.mkdirs();
					}
				} else {
					String fileName=  fileHeader.getFileNameW().trim();
					if(!existZH(fileName)){
						fileName = fileHeader.getFileNameString().trim();
					}
					File file = new File(dstDir + File.separator + fileName);
					try {
						if (!file.exists()) {
							if (!file.getParentFile().exists()) {
								file.getParentFile().mkdirs();
							}
							file.createNewFile();
						}
						FileOutputStream os = new FileOutputStream(file);
						archive.extractFile(fileHeader, os);
						os.close();
					} catch (Exception ex) {
						throw ex;
					}
				}
			}
			archive.close();
		} catch (Exception e) {
			throw e;
		}
	}
	public static boolean existZH(String str) {
		String regEx = "[\\u4e00-\\u9fa5]";
		Pattern p = Pattern.compile(regEx);
		Matcher m = p.matcher(str);
		while (m.find()) {
			return true;
		}
		return false;
	}
	
	
    //使用main方法進(jìn)行測試
	public static void main(String[] args) {
		try {
			String filepath = "E:\\test\\測試1.rar";
			String newpath="E:\\test\\zipTest";
			//獲取最后一個(gè).的位置
			int lastIndexOf = filepath.lastIndexOf(".");
			//獲取文件的后綴名 .jpg
			String suffix = filepath.substring(lastIndexOf);
			System.out.println(suffix);
			if(suffix.equals(".zip")){
				unZipFiles(filepath,newpath);

			}else if(suffix.equals(".rar")){
				unRarFile(filepath,newpath);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

第二種:

// 獲取本地rar
public void unRarByPath() {
    String rarPath = "D:\\文件.rar";
    try {
        File outFileDir = new File(rarPath);
        Archive archive = new Archive(new FileInputStream(rarFile));
        FileHeader fileHeader;
         while ((fileHeader = archive.nextFileHeader()) != null) {
         	// 解決文件名中文亂碼問題
             String fileName = fileHeader.getFileNameW().isEmpty() ? fileHeader.getFileNameString() :
                     fileHeader.getFileNameW();
             String fileExt =
                     fileName.substring(fileName.lastIndexOf(FileConstant.FILE_SEPARATOR) + 1);
             System.out.println(fileName);
             ByteArrayOutputStream os = new ByteArrayOutputStream();
             archive.extractFile(fileHeader, os);
            // 將文件信息寫到byte數(shù)組中
             byte[] bytes = os.toByteArray();
             System.out.println(bytes.length);
             if ("rar".equals(fileExt)) {
                 Archive secondArchive = new Archive(new ByteArrayInputStream(bytes));
                 // 循環(huán)解壓
             }
         }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

第三種:

/**
     * 根據(jù)原始rar路徑,解壓到指定文件夾下
     * 這種方法只能解壓rar 5.0版本以下的,5.0及其以上的無法解決
     *
     * @param srcRarPath       原始rar路徑+name
     * @param dstDirectoryPath 解壓到的文件夾
     */
    public static String unRarFile(String srcRarPath, String dstDirectoryPath) throws Exception {
        log.debug("unRarFile srcRarPath:{}, dstDirectoryPath:{}", srcRarPath, dstDirectoryPath);
        if (!srcRarPath.toLowerCase().endsWith(".rar")) {
            log.warn("srcFilePath is not rar file");
            return "";
        }
        File dstDiretory = new File(dstDirectoryPath);
        // 目標(biāo)目錄不存在時(shí),創(chuàng)建該文件夾
        if (!dstDiretory.exists()) {
            dstDiretory.mkdirs();
        }
        // @Cleanup Archive archive = new Archive(new File(srcRarPath));  com.github.junrar 0.7版本jarAPI
        @Cleanup Archive archive = new Archive(new FileInputStream(new File(srcRarPath)));
        if (archive != null) {
            // 打印文件信息
            archive.getMainHeader().print();
            FileHeader fileHeader = archive.nextFileHeader();
            while (fileHeader != null) {
                // 解決中文亂碼問題【壓縮文件中文亂碼】
                String fileName = fileHeader.getFileNameW().isEmpty() ? fileHeader.getFileNameString() : fileHeader.getFileNameW();
                // 文件夾
                if (fileHeader.isDirectory()) {
                    File fol = new File(dstDirectoryPath + File.separator + fileName.trim());
                    fol.mkdirs();
                } else { // 文件
                    // 解決linux系統(tǒng)中\(zhòng)分隔符無法識(shí)別問題
                    String[] fileParts = fileName.split("\\\\");
                    StringBuilder filePath = new StringBuilder();
                    for (String filePart : fileParts) {
                        filePath.append(filePart).append(File.separator);
                    }
                    fileName = filePath.substring(0, filePath.length() - 1);
                    File out = new File(dstDirectoryPath + File.separator + fileName.trim());
                    if (!out.exists()) {
                        // 相對(duì)路徑可能多級(jí),可能需要?jiǎng)?chuàng)建父目錄.
                        if (!out.getParentFile().exists()) {
                            out.getParentFile().mkdirs();
                        }
                        out.createNewFile();
                    }
                    @Cleanup FileOutputStream os = new FileOutputStream(out);
                    archive.extractFile(fileHeader, os);
                }
                fileHeader = archive.nextFileHeader();
            }
        } else {
            log.warn("rar file decompression failed , archive is null");
        }
        return dstDirectoryPath;
    }

文章來源地址http://www.zghlxwxcb.cn/news/detail-604875.html

到了這里,關(guān)于Java解壓RAR文件的幾種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 服務(wù)器使用——解壓常見文件tar、zip、rar等

    服務(wù)器使用——解壓常見文件tar、zip、rar等

    1.tar文件 2.zip文件 這篇關(guān)于zip博客寫的挺全的,這里直接放鏈接。 3.rar文件 首先下載RAR 6.21 for Linux x64 下載完后安裝: 加壓后可以看到有一個(gè)rar.txt,里面有rar具體的使用方法。這里粘貼復(fù)制下來

    2024年02月10日
    瀏覽(20)
  • Python實(shí)現(xiàn)rar、zip和7z文件的壓縮和解壓

    一、7z壓縮文件的壓縮和解壓 1、安裝py7zr 我們要先安裝 py7zr 第三方庫: 如果python環(huán)境有問題,執(zhí)行上面那一條安裝語句老是安裝在默認(rèn)的python環(huán)境的話,我們可以執(zhí)行下面這條語句,將第三方庫安裝在項(xiàng)目的虛擬環(huán)境中: 2、解壓7z文件 3、壓縮成7z文件 二、rar壓縮文件的壓

    2024年02月07日
    瀏覽(25)
  • [python]批量解壓文件夾下所有壓縮包(rar、zip、7z)

    [python]批量解壓文件夾下所有壓縮包(rar、zip、7z)

    ????????在文件夾作用包含許多壓縮包的時(shí)候,解壓起來就很費(fèi)時(shí)費(fèi)力,尤其是在文件夾還存在嵌套的情況下,解壓起來就更麻煩了。Franpper今天給大家?guī)磉f歸遍歷指定路徑下的所有文件和文件夾,批量解壓所有壓縮包的方法,幫大家一鍵解壓。 ? ? ? ? 常見的壓縮包格

    2024年02月09日
    瀏覽(29)
  • .net rar zip壓縮包解壓

    引入? SharpCompress https://download.csdn.net/download/weixin_42020830/87737306 string?targetFile=\\\"c:\\\\test.zip\\\"; string?zipFile=\\\"c:\\\\test\\\"; ?using (Stream stream =System.IO.File.OpenRead(targetFile)) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? var reader = ReaderFactory.Open(stream); ? ? ? ? ? ? ? ? ? ? ? ? while (r

    2024年02月01日
    瀏覽(15)
  • linux_文件壓縮、文件解壓(gzip命令、gunzip 命令、bzip2命令、bunzip2命令、tar命令、rar命令、zip命令)

    接上一篇:linux用戶管理(查看在線用戶who命令、創(chuàng)建用戶adduser命令、創(chuàng)建用戶組groupadd命令、查看用戶組groups命令、刪除用戶、設(shè)置用戶密碼passwd命令) 本次來分享怎樣在 linux中壓縮和解壓文件夾 ,在linux中壓縮解壓的方式有 5種 ,分別是 gz格式壓縮解壓、bz2格式壓縮解壓、

    2024年02月01日
    瀏覽(23)
  • Java讀取文件的幾種方式

    1. 使用流讀取文件 2. 使用JDK1.7提供的NIO讀取文件(適用于小文件) 3. 使用JDK1.7提供的NIO讀取文件(適用于大文件) 4. 使用JDK1.4提供的NIO讀取文件(適用于超大文件) 5. 使用cmmons-io依賴提供的FileUtils工具類讀取文件 添加依賴: 6. 使用cmmons-io依賴提供的IOtils工具類讀取文件 添加依賴:

    2024年02月16日
    瀏覽(27)
  • java 讀取文件的幾種方式

    在 Java 中有幾種常用的方式來讀取文件: 使用 FileInputStream 類以字節(jié)的方式讀取文件。 使用 BufferedReader 在字符輸入流上包裝一個(gè)緩沖區(qū),以行為單位讀取文件。 使用 Scanner 類以分隔符為標(biāo)志讀取文件。 使用 Files 類的 readAllLines 方法一次性讀取所有行。 使用 ObjectInputStream 反

    2024年02月14日
    瀏覽(18)
  • QT 利用開源7z 實(shí)現(xiàn)解壓各種壓縮包,包括進(jìn)度條和文件名的顯示(zip,7z,rar,iso等50多種格式)

    QT 利用開源7z 實(shí)現(xiàn)解壓各種壓縮包,包括進(jìn)度條和文件名的顯示(zip,7z,rar,iso等50多種格式)

    ? ? ? ? 想做一個(gè)winRAR一樣的解壓軟件嗎?很簡單,利用開源的7z庫就能實(shí)現(xiàn)。我看網(wǎng)上其他人說的方法不敢茍同,誤人子弟。以前自己在項(xiàng)目中使用過7z,這次又有需要,就想記錄下來。如果你研究過如何用7z的話,一定知道7z的每一個(gè)GUID都代表了一種格式,50多種GUID也就有

    2024年02月04日
    瀏覽(24)
  • Java如何實(shí)現(xiàn)下載文件的幾種方式

    版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。 本文鏈接:https://blog.csdn.net/Boy_Martin/article/details/126058565

    2024年02月13日
    瀏覽(30)
  • Java開發(fā)或調(diào)用WebService的幾種方式

    Java開發(fā)或調(diào)用WebService的幾種方式

    1.服務(wù)端開發(fā)與發(fā)布 編寫接口 編寫接口的實(shí)現(xiàn)類 發(fā)布服務(wù) 訪問已發(fā)布的WebService服務(wù) 打開瀏覽器輸入http://127.0.0.1:8888/JaxWSTest?wsdl訪問,如下面內(nèi)容 截圖內(nèi)容1 瀏覽器中輸入wsdl文檔中的 http://127.0.0.1:8888/JaxWSTest?xsd=1可查看綁定的參數(shù)等信息看如下圖: 截圖內(nèi)容2 jdk自帶生成W

    2024年01月17日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包