java程序调用winRAR命令行
windows中winrar命令行方式使用
windows中winrar命令行方式使用在Windows系统中的文件压缩/解压缩工具winrar功能强大,虽然我们都习惯于用图形界面的winrar,但是它也能在命令行方式下面使用,这在企图让winrar批量自动压缩解压缩的时候尤其有用。
它自带的帮助也非常的全面,现在从中择出来一些比较常用的总结一下,以免再找的时候比较头晕1,最简单的压缩命令:winrar a asdf.txt.rar asdf.txta的意思是进行压缩动作,后面第一个参数是被压缩后的文件名,后缀当然是rar 了,最后面的参数就是要被压缩的文件名2,最简单的解压缩命令:winrar e asdf.txt.rare的意思是执行解压缩,解压缩的文件是后面这唯一的参数,但是这个e解压缩是把解出来的文件释放到当前目录下面,与asdf.txt.rar文件并列了,因此,更加实用的是下面的带路径解压缩。
3,带路径的解压缩命令:winrar x asdf.rarx的意思是执行带绝对路径解压动作,这会在当前文件夹下创建一个文件夹asdf,把压缩包里的文件、文件夹不改动结构释放到文件asdf里面,就像我们在winrar的图形界面下看到的一样。
4,指定压缩级别压缩:winrar a -m5 asdf.tr.rar asdf.tr要被压缩的不再是一个txt文本,而是一个文本格式的十几M的仿真数据文件,希望能够最大程度的压缩。
使用压缩参数-m5。
在winrar中,执行操作是不带前导-符号的参数,比如“a”或“x”,而修饰这种动作的参数,使用带前导符号“-”的参数,比如-m5。
其中-m就是指定压缩级别的参数,压缩级别有如下五级:-m0 存储添加到压缩文件时不压缩文件。
-m1 最快使用最快方式(低压缩-m2 较快使用快速压缩方式-m3 标准使用标准(默认压缩方式-m4 较好使用较好压缩方式(较好压缩,但是慢-m5 最好使用最大压缩方式(最好的压缩,但是最慢默认的是-m3级别,级别不同,对于大数据量的文本文件压缩后的文件大小有很大的差异5,指定压缩后删除原文件:winrar a -m5 -df asdf.tr.rar asdf.tr用参数-df指定压缩为asdf.tr.rar压缩文件后,删除原文件asdf.tr,也可以是:winrar m -m5 asdf.tr.rar asdf.tr这个m的意思是把文件asdf.tr移动入压缩文件asdf.tr.rar中6,创建自解压文件:winrar s asdf.tr.rar在gui界面中,创建自解压文件是有个选项可以直接选择的。
java对压缩文件进行加密,winrar和好压直接输入解密密码来使用
java对压缩⽂件进⾏加密,winrar和好压直接输⼊解密密码来使⽤<!-- https:///artifact/net.lingala.zip4j/zip4j --><dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.2</version></dependency>或者下载zip4j-1.3.2.jar以下是对⽂件压缩的⽅法,这⾥只是单个⽂件压缩,多个变通⼀下就可以。
package com.yggdrasill.foura.web.sysadmin.backup.service;import net.lingala.zip4j.core.ZipFile;import net.lingala.zip4j.exception.ZipException;import net.lingala.zip4j.model.ZipParameters;import net.lingala.zip4j.util.Zip4jConstants;import java.io.*;import java.util.ArrayList;public class ZipComplexCipherUtil {/*** 加密1,winrar,好压2345可直接输⼊密码解压* 根据filepath读取⽂件并加密返回*/public static void zipFileAndEncrypt(String filePath,String zipFileName,String password) {try {ZipParameters parameters = setParam(password);//压缩⽂件,并⽣成压缩⽂件ArrayList<File> filesToAdd = new ArrayList<File>();File file = new File(filePath);filesToAdd.add(file);ZipFile zipFile = new ZipFile(zipFileName);zipFile.addFiles(filesToAdd, parameters);//this line does worksSystem.err.println("end");} catch (ZipException e) {e.printStackTrace();}}/*** 加密1,winrar,好压2345可直接输⼊密码解压*/public static void zipFileStream(InputStream is,String zipFileName,String password) {try {ZipParameters parameters = setParam(password);//addStream,多设置两个参数,缺⼀不可parameters.setFileNameInZip("yourfilename.xlsx");parameters.setSourceExternalStream(true);ZipFile zipFile = new ZipFile(zipFileName);zipFile.addStream(is, parameters);} catch (ZipException e) {e.printStackTrace();}}public static ZipParameters setParam(String password){//设置压缩⽂件参数ZipParameters parameters = new ZipParameters();//设置压缩⽅法parameters.setCompressionMethod(P_DEFLATE);//设置压缩级别parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);//设置压缩⽂件是否加密parameters.setEncryptFiles(true);//设置aes加密强度parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);//设置加密⽅法parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);//设置密码parameters.setPassword(password.toCharArray());return parameters;}public static void main(String[] args) throws Exception {try{long l1 = System.currentTimeMillis();////加密,addFile// ZipComplexCipherUtil.zipFileAndEncrypt("D:\\aaa\\zhmm_db.xlsx","D:\\aaa\\ccc.zip","123");// 加密,addStreamInputStream in = new FileInputStream("D:\\aaa\\zhmm_db.xlsx"); ZipComplexCipherUtil.zipFileStream(in,"D:\\aaa\\ccc.zip","123");long l2 = System.currentTimeMillis();System.out.println((l2 - l1) + "毫秒.");System.out.println(((l2 - l1) / 1000) + "秒.");}catch(Exception ex){ex.printStackTrace();}}}。
java 第三方包调用的方法
java 第三方包调用的方法在Java中,调用第三方包的方法通常涉及以下步骤:1. 导入包:首先,确保你的项目中已经包含了需要的第三方包。
这可以通过将相应的JAR 文件包含在你的项目中,或者通过构建工具(如Maven、Gradle)来添加依赖项。
2. 创建对象:通常,你需要实例化第三方包中的类,以便调用其方法。
这可以通过使用`new` 关键字来实现。
3. 调用方法:一旦你有了第三方包的对象,你就可以调用其方法。
方法的调用可能需要提供参数,这取决于方法的签名。
以下是一个简单的示例,演示如何调用第三方包的方法:```java// 导入第三方包中的类import com.example.ThirdPartyClass;public class MyApplication {public static void main(String[] args) {// 创建第三方包中的类的对象ThirdPartyClass thirdPartyObject = new ThirdPartyClass();// 调用第三方包中的方法thirdPartyObject.someMethod();// 如果方法接受参数,例如一个字符串参数String result = thirdPartyObject.methodWithParameter("Hello, World!");System.out.println(result);}}```请注意,上述代码中的`com.example.ThirdPartyClass` 是一个虚构的示例。
你需要替换它为你实际使用的第三方包中的类。
确保查阅第三方包的文档以了解如何正确使用它的类和方法。
文档通常提供了详细的信息,包括类、方法的说明以及示例用法。
如何在java中解压zip和rar文件
如何在java中解压zip和rar文件如何在java中解压zip和rar文件为了方便广大的程序员朋友,下面讲一讲如何在java中实现对zip 和rar文件的解压,一起和店铺来看看吧!一、解压rar文件。
由于WinRAR 是共享软件,并不是开源的,所以解压rar文件的前提是系统已经安装了winrar,比如本人的安装路径是:C:\\Program Files\\WinRAR\\winrar.exe然后运用ng.Process 的.相关知识来运行系统命令行来实现解压的。
winrar 命令行相关参数自己可以搜索下的网上资料很多具体代码:Java代码*** 解压rar文件(需要系统安装Winrar 软件)* @author Michael sun*/public class UnRarFile {/*** 解压rar文件** @param targetPath* @param absolutePath*/public void unRarFile(String targetPath, String absolutePath) {try {// 系统安装winrar的路径String cmd = "C:\\Program Files\\WinRAR\\winrar.exe";String unrarCmd = cmd + " x -r -p- -o+ " + absolutePath + " "+ targetPath;Runtime rt = Runtime.getRuntime();Process pre = rt.exec(unrarCmd);InputStreamReader isr = new InputStreamReader(pre.getInputStream());BufferedReader bf = new BufferedReader(isr);String line = null;while ((line = bf.readLine()) != null) {line = line.trim();if ("".equals(line)) {continue;}System.out.println(line);}bf.close();} catch (Exception e) {System.out.println("解压发生异常");}}/*** @param args*/public static void main(String[] args) {String targetPath = "D:\\test\\unrar\\";String rarFilePath = "D:\\test\\test.rar";UnRarFile unrar = new UnRarFile();unrar.unRarFile(targetPath, rarFilePath);}}二、解压zip文件由于zip是免费的,所以在jdk里提供了相应的类对zip文件的实现:java.util.zip.*,详细情况可以参考java APIJava代码/*** 解压zip文件* @author Michael sun*/public class UnzipFile {/*** 解压zip文件** @param targetPath* @param zipFilePath*/public void unzipFile(String targetPath, String zipFilePath) { try {File zipFile = new File(zipFilePath);InputStream is = new FileInputStream(zipFile);ZipInputStream zis = new ZipInputStream(is);ZipEntry entry = null;System.out.println("开始解压:" + zipFile.getName() + "...");while ((entry = zis.getNextEntry()) != null) {String zipPath = entry.getName();try {if (entry.isDirectory()) {File zipFolder = new File(targetPath + File.separator+ zipPath);if (!zipFolder.exists()) {zipFolder.mkdirs();}} else {File file = new File(targetPath + File.separator+ zipPath);if (!file.exists()) {File pathDir = file.getParentFile();pathDir.mkdirs();file.createNewFile();}FileOutputStream fos = new FileOutputStream(file); int bread;while ((bread = zis.read()) != -1) {fos.write(bread);}fos.close();}System.out.println("成功解压:" + zipPath);} catch (Exception e) {System.out.println("解压" + zipPath + "失败"); continue;}}zis.close();is.close();System.out.println("解压结束");} catch (Exception e) {e.printStackTrace();}}/*** @param args*/public static void main(String[] args) { String targetPath = "D:\\test\\unzip"; String zipFile = "D:\\test\\test.zip"; UnzipFile unzip = new UnzipFile(); unzip.unzipFile(targetPath, zipFile); }}。
windows中winrar命令行方式使用
windows中winra r命令行方式使用在Windows系统中的文件压缩/解压缩工具wi nrar功能强大,虽然我们都习惯于用图形界面的winra r,但是它也能在命令行方式下面使用,这在企图让wi nrar批量自动压缩解压缩的时候尤其有用。
它自带的帮助也非常的全面,现在从中择出来一些比较常用的总结一下,以免再找的时候比较头晕1,最简单的压缩命令:winrara asdf.txt.rar asdf.txta的意思是进行压缩动作,后面第一个参数是被压缩后的文件名,后缀当然是ra r了,最后面的参数就是要被压缩的文件名2,最简单的解压缩命令:winrare asdf.txt.rare的意思是执行解压缩,解压缩的文件是后面这唯一的参数,但是这个e解压缩是把解出来的文件释放到当前目录下面,与asdf.txt.rar文件并列了,因此,更加实用的是下面的带路径解压缩。
3,带路径的解压缩命令:winrarx asdf.rarx的意思是执行带绝对路径解压动作,这会在当前文件夹下创建一个文件夹asd f,把压缩包里的文件、文件夹不改动结构释放到文件a sdf里面,就像我们在wi nrar的图形界面下看到的一样。
4,指定压缩级别压缩:winrara -m5 asdf.tr.rar asdf.tr要被压缩的不再是一个txt文本,而是一个文本格式的十几M的仿真数据文件,希望能够最大程度的压缩。
使用压缩参数-m5。
在winrar中,执行操作是不带前导-符号的参数,比如“a ”或“x”,而修饰这种动作的参数,使用带前导符号“-”的参数,比如-m5。
其中-m就是指定压缩级别的参数,压缩级别有如下五级:-m0 存储添加到压缩文件时不压缩文件。
-m1 最快使用最快方式(低压缩)-m2 较快使用快速压缩方式-m3 标准使用标准(默认)压缩方式-m4 较好使用较好压缩方式(较好压缩,但是慢)-m5 最好使用最大压缩方式(最好的压缩,但是最慢)默认的是-m3级别,级别不同,对于大数据量的文本文件压缩后的文件大小有很大的差异5,指定压缩后删除原文件:winrara -m5 -df asdf.tr.rar asdf.tr用参数-df指定压缩为a sdf.tr.rar压缩文件后,删除原文件asdf.tr,也可以是:winrarm -m5 asdf.tr.rar asdf.tr这个m的意思是把文件asd f.tr移动入压缩文件asdf.tr.rar中6,创建自解压文件:winrars asdf.tr.rar在gui界面中,创建自解压文件是有个选项可以直接选择的。
JAVA自带API的压缩与解压
JAVA⾃带API的压缩与解压Java API中的 java.util.zip.*;包下包含了Java对于压缩⽂件的所有相关操作。
我们可以使⽤该包中的⽅法,结合IO中的相关知识,进⾏⽂件的压缩和解压缩相关操作。
ZipFilejava中的每⼀个压缩⽂件都是可以使⽤ZipFile来进⾏表⽰的。
1. File file = new File("F:/zippath.zip");2. ZipFile zipFile = new ZipFile(file);3. System.out.println("压缩⽂件的名称为:" + zipFile.getName());压缩单个⽂件1. /** 压缩单个⽂件*/2. public static void ZipFile(String filepath ,String zippath) {3. try {4. File file = new File(filepath);5. File zipFile = new File(zippath);6. InputStream input = new FileInputStream(file);7. ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));8. zipOut.putNextEntry(new ZipEntry(file.getName()));9. int temp = 0;10. while((temp = input.read()) != -1){11. zipOut.write(temp);12. }13. input.close();14. zipOut.close();15. } catch (Exception e) {16. e.printStackTrace();17. }18. }应⽤:ZipFile("d:/hello.txt", "d:/hello.zip");压缩多个⽂件(⽂件夹)1. /** ⼀次性压缩多个⽂件,⽂件存放⾄⼀个⽂件夹中*/2. public static void ZipMultiFile(String filepath ,String zippath) {3. try {4. File file = new File(filepath);// 要被压缩的⽂件夹5. File zipFile = new File(zippath);6. InputStream input = null;7. ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));8. if(file.isDirectory()){9. File[] files = file.listFiles();10. for(int i = 0; i < files.length; ++i){11. input = new FileInputStream(files[i]);12. zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator + files[i].getName()));13. int temp = 0;14. while((temp = input.read()) != -1){15. zipOut.write(temp);16. }17. input.close();18. }19. }20. zipOut.close();21. } catch (Exception e) {22. e.printStackTrace();23. }24. }应⽤:ZipMultiFile("f:/uu", "f:/zippath.zip");解压缩单个⽂件1. /** 解压缩(解压缩单个⽂件)*/2. public static void ZipContraFile(String zippath ,String outfilepath ,String filename) {3. try {4. File file = new File(zippath);//压缩⽂件路径和⽂件名5. File outFile = new File(outfilepath);//解压后路径和⽂件名6. ZipFile zipFile = new ZipFile(file);7. ZipEntry entry = zipFile.getEntry(filename);//所解压的⽂件名8. InputStream input = zipFile.getInputStream(entry);9. OutputStream output = new FileOutputStream(outFile);10. int temp = 0;11. while((temp = input.read()) != -1){12. output.write(temp);13. }14. input.close();15. output.close();16. } catch (Exception e) {17. e.printStackTrace();18. }19. }应⽤:ZipContraFile("d:/hello.zip","d:/eee.txt", "hello.txt");解压缩多个⽂件ZipInputStream类:当我们需要解压缩多个⽂件的时候,ZipEntry就⽆法使⽤了。
Java如何调用可执行文件和批处理命令
Java如何调用可执行文件和批处理命令●篇一Java 是种跨平台的语言,我们经常碰到需要通过Java调用windows下某些程序。
有些第三方厂商如(ANT),也提供了调用windows下可执行程序的方法,但我们往往需要调用一些批处理命令。
而java 却不提供。
这里,我采用一种变相的调用方法,使得Java 能调用批处理命令。
如果您有更好的方法,希望您能告诉我。
前期准备[/B]Quick Batch File (De)Compiler将任何BAT、CMD批处理脚本编译为EXE文件!开始1.运行exe 文件Java JDK里已经提供了调用的方法,不在累赘,代码如下。
try {String command = "notepad";Process child = Runtime.getRuntime().exec(command);} catch (IOException e) {}2.运行bat(批处理)文件Java 对批处理文件还不支持。
刚开始一直在研究Java 如何调用批处理文件,始终找不到解决方法。
后来只好绕过批处理,考虑如何将批处理转换为exe可执行文件。
然后再通过Java调用可执行文件。
在Google上搜索一下,找到Quick Batch File (De)Compiler,可以将任何BAT、CMD批处理脚本编译为EXE文件。
使用了一下,果然可以。
Quick Batch File (De)Compiler使用非常简单:Quickbfc 文件名.bat 文件名.exe(将批处理命令编译为可执行文件)quickbfd 文件名.exe 文件名.bat(将可执行文件反编译为批处理命令)然后,我们再按第一种方法通过Java 调用,即可。
●篇二由于java 是跨平台的,有时候我们需要用到操作系统的一些信息,为了方便期间,干脆就直接调用操作系统的命令来实现,比如查看IP地址,MAC地址等。
【转】winrar命令行详解
【转】winrar命令⾏详解从命令⾏也可以运⾏ WinRAR 命令,常规的命令⾏语法描述如下:WinRAR <命令> -<开关1> -<开关N> <压缩⽂件> <⽂件...> <@列表⽂件...> <解压路径\>命令:WinRAR 运⾏的字符组合代表功能开关:切换操作指定类型,压缩强度,压缩⽂件类型,等等的定义。
压缩⽂件:要处理的压缩⽂件名。
⽂件:要处理的⽂件名。
列表⽂件:列表⽂件是包含要处理⽂件名称的纯⽂本。
⽂件名应该在第⼀卷启动。
可以在列表⽂件中使⽤//字符后添加注释.例如,你可以包含两列字符串创建 backup.lst:c:\work\doc\*.txt //备份⽂本⽂档 c:\work\image\*.bmp //备份图⽚c:\work\misc并接着运⾏: winrar a backup @backup.lst你可以在命令⾏中同时指定普通的⽂件名和列表⽂件名。
解压路径只与命令 e 和 x ,搭配使⽤。
指出解压⽂件添加的位置。
如果⽂件夹不存在时,会⾃动创建。
注意事项a) 如果未指定⽂件或是列表⽂件时,WinRAR 将会以缺省的 *.* 运⾏全部的⽂件;b) 如果未指定压缩⽂件扩展名时,WinRAR 将会使⽤在压缩配置中选定的默认压缩⽂件格式。
但你可以指定 .RAR 或 .ZIP 扩展名来替换它们;c) 在命令⾏所输⼊的开关会替换相同的配置设置值;d) 在命令 c、e、s、t、rr、k 和 x 可在压缩⽂件名中使⽤通配符。
如此可以⽤单个的命令来进⾏超过⼀个以上的压缩⽂件,除此之外,如果你指定 -r 开关于这些命令时,它们将会搜索在⼦⽂件夹中的压缩⽂件;e) 某些命令和开关只应⽤在 RAR 压缩⽂件,有些则在 RAR 和 ZIP 都可使⽤,⽽某些则可应⽤在全部的压缩⽂件格式。
这⼀些都得看压缩⽂件格式所提供的特性⽽定;f) 命令和开关的⼤⼩写是相同意思的,你可以⽤⼤写或者⼩写来下命令均可。
Java文件压缩成rar
import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;public class FileToRar extends JFrame implements ActionListener{ JPanel pnl;JLabel lbl;JLabel lb;JTextField jtext;JButton btnFile,btnDo;String filepath;JFileChooser chooser = new JFileChooser();private static String rarCmd = "C:/Program Files/WinRAR/Rar.exe a ";public FileToRar(){pnl=new JPanel();this.setContentPane(pnl);pnl.setLayout(null);pnl.setBackground(Color.WHITE);lbl=new JLabel("");lb=new JLabel("下面的路径不能有空格");jtext=new JTextField(20);btnFile=new JButton("选择文件");btnFile.addActionListener(this);btnDo=new JButton("开始处理");btnDo.addActionListener(this);lbl.setBounds(150, 30, 250, 20);jtext.setBounds(100, 130, 300, 20);btnFile.setBounds(10, 130, 70, 20);btnDo.setBounds(185, 180, 100, 20);lb.setBounds(170, 60, 250, 20);pnl.add(lbl);pnl.add(jtext);pnl.add(btnFile);pnl.add(btnDo);pnl.add(lb);this.setTitle("文件压缩");this.setBounds(400,250,465,350);this.setVisible(true);this.setDefaultCloseOperation(EXIT_ON_CLOSE);}public void actionPerformed(ActionEvent e){if(e.getSource()==btnFile){chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);int returnVal = chooser.showOpenDialog(this);if(returnVal==JFileChooser.APPROVE_OPTION){jtext.setText(chooser.getSelectedFile().getPath());filepath = jtext.getText();}}if(e.getSource()==btnDo){long start=System.currentTimeMillis();this.fileList(filepath);long end=System.currentTimeMillis();System.out.println("时间:"+(end-start)+ " 毫秒");JOptionPane.showMessageDialog(null, "处理完成!");System.exit(0);}}public void fileList(String fileInput){File file=new File(fileInput);File[] fileArray=file.listFiles();for(int i=0;i<fileArray.length;i++){folderToRar(fileArray[i].toString());}}//核心方法:调用WinRAR的命令 C:\Program Files\WinRAR\Rar.exe a D:/a.rar D:/a//注意:由于是调用系统的命令,所以路径不能有空格public void folderToRar(String str){String cmd="";cmd=rarCmd+str+".rar" +" "+str ;System.out.println(cmd);try {Runtime rt = Runtime.getRuntime();Process p = rt.exec(cmd);} catch (Exception e) {System.out.println(e.getMessage());}}/*** @param args*/public static void main(String[] args) { // TODO Auto-generated method stubnew FileToRar();}}。
java解压代码
java解压代码Java中的文件压缩和解压缩是非常常见的操作,它对于压缩和解压缩文件的大小和传输速度起着很大的作用。
Java中提供了一些类用于文件压缩和解压缩,例如ZipInputStream、ZipOutputStream和GZIPInputStream、GZIPOutputStream等等。
这些类使用起来非常简单,只需要了解其基本用法就可以轻松实现文件的压缩和解压缩,下面就来详细了解一下Java解压代码的实现方法。
1. ZipInputStream和ZipOutputStreamZipInputStream和ZipOutputStream可以用来压缩和解压缩Zip格式的文件,Zip格式是一种非常常见的文件格式,它可以用来打包多个文件,节省空间并且便于传输。
下面是一个简单的例子,演示如何使用ZipInputStream和ZipOutputStream来解压和压缩Zip格式的文件://解压缩文件public static void unzip(String zipFilePath, String destDirectory) throws IOException {File destDir = new File(destDirectory);if (!destDir.exists()) {destDir.mkdir();}ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));ZipEntry entry = zipIn.getNextEntry();while (entry != null) {String filePath = destDirectory + File.separator + entry.getName();if (!entry.isDirectory()) {//如果是文件则直接写入文件BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));byte[] bytesIn = new byte[4096];int read = 0;while ((read = zipIn.read(bytesIn)) != -1) { bos.write(bytesIn, 0, read);}bos.close();} else {//如果是文件夹则创建文件夹File dir = new File(filePath);dir.mkdir();}zipIn.closeEntry();entry = zipIn.getNextEntry();}zipIn.close();}//压缩文件public static void zip(String sourceDirectory, String zipFilePath) throws IOException {ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFilePath));File fileToZip = new File(sourceDirectory);zipFile(fileToZip, fileToZip.getName(), zipOut);zipOut.close();}private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException { if (fileToZip.isHidden()) {return;}if (fileToZip.isDirectory()) {if (fileName.endsWith("/")) {zipOut.putNextEntry(new ZipEntry(fileName));zipOut.closeEntry();} else {zipOut.putNextEntry(new ZipEntry(fileName + "/"));zipOut.closeEntry();}File[] children = fileToZip.listFiles();for (File childFile : children) {zipFile(childFile, fileName + "/" + childFile.getName(), zipOut);}return;}FileInputStream fis = new FileInputStream(fileToZip);ZipEntry zipEntry = new ZipEntry(fileName);zipOut.putNextEntry(zipEntry);byte[] bytes = new byte[1024];int length;while ((length = fis.read(bytes)) >= 0) {zipOut.write(bytes, 0, length);}fis.close();}使用ZipInputStream和ZipOutputStream时需要注意以下事项:-每个ZipEntry代表一个文件或者文件夹,ZipInputStream先返回文件夹的信息,再返回文件的信息。
java通用解压代码
java通用解压代码Java是一种通用的编程语言,广泛应用于各个领域。
在Java中,我们经常会遇到需要对文件进行解压的情况,比如解压缩zip文件或者解压缩tar文件等。
本文将介绍如何使用Java进行通用的解压操作。
我们需要了解Java中的解压相关的类和方法。
Java提供了java.util.zip包来处理压缩和解压缩操作。
在这个包中,主要涉及到两个类:ZipInputStream和ZipEntry。
ZipInputStream类用于从zip文件中读取数据,ZipEntry类代表zip文件中的一个实体(文件或文件夹)。
接下来,我们就可以使用Java的解压代码来进行解压操作了。
首先,我们需要创建一个ZipInputStream对象,并将需要解压的zip文件作为输入流传递给它。
然后,我们可以使用ZipInputStream的getNextEntry()方法来获取zip文件中的下一个实体(文件或文件夹)。
在获取到实体后,我们可以通过ZipEntry的getName()方法获取实体的名称,并通过ZipEntry的isDirectory()方法判断实体是否为文件夹。
如果是文件夹,则可以使用Java的文件操作来创建相应的文件夹;如果是文件,则可以使用Java的文件操作来创建相应的文件,并将ZipInputStream中的数据写入到文件中。
接着,我们可以使用ZipInputStream的closeEntry()方法关闭当前实体,并继续获取下一个实体。
当没有下一个实体时,我们可以使用ZipInputStream的close()方法关闭输入流。
下面是一个示例代码,用于解压缩一个zip文件:```javaimport java.io.*;import java.util.zip.*;public class UnzipExample {public static void main(String[] args) {String zipFilePath = "path/to/zip/file.zip";String destDirectory = "path/to/destination/directory";try {FileInputStream fis = new FileInputStream(zipFilePath);ZipInputStream zis = new ZipInputStream(fis);ZipEntry zipEntry = zis.getNextEntry();while (zipEntry != null) {String fileName = zipEntry.getName();File newFile = new File(destDirectory + File.separator + fileName);if (zipEntry.isDirectory()) {newFile.mkdirs();} else {// Create parent directories if necessarynew File(newFile.getParent()).mkdirs(); FileOutputStream fos = new FileOutputStream(newFile);byte[] buffer = new byte[1024];int length;while ((length = zis.read(buffer)) > 0) {fos.write(buffer, 0, length);}fos.close();}zis.closeEntry();zipEntry = zis.getNextEntry();}zis.close();fis.close();System.out.println("Unzip completed successfully!");} catch (IOException e) {e.printStackTrace();}}}```在上述代码中,我们需要指定要解压的zip文件路径(zipFilePath)和解压后存放文件的目录路径(destDirectory)。
java压缩文件解压:调用WinRAR5命令强于自己写代码实现
java压缩⽂件解压:调⽤WinRAR5命令强于⾃⼰写代码实现最近,⼿上维护着⼀个⼏年前的系统,技术是⽤的JSP+Strust2,系统提供了rar和zip两种压缩格式的解压功能,后台是⽤java实现的1、解压rar格式,采⽤的是java-unrar-0.3.jar2、解压zip格式,采⽤的是commons-compress-1.4.1.jar但最近根据⽤户反馈的问题,发现系统存在两个关于压缩⽂件解压的问题:1、有些压缩⽂件解压之后出现中⽂乱码;2、有些压缩⽂件根本不能解压为了弥补上述两个问题,在之前代码的基础上打了⼀些补丁,来解决zip压缩包乱码的问题,思路⼤概是:1、采⽤GBK编码解压2、递归遍历解压的⽂件名是否存在中⽂乱码,这⽤到了⽹上很常⽤的中⽂检测正则表⽰式,[\u4e00-\u9fa5]+3、如果存在中⽂乱码,则采⽤UTF-8编码解压替换后,还是有⼈反映乱码问题,烦~~~第⼆个问题报错如下(出现在有些rar格式解压时):WARNING: exception in archive constructor maybe file is encrypted or curruptde.innosystec.unrar.exception.RarException: badRarArchiveat de.innosystec.unrar.Archive.readHeaders(Archive.java:238)at de.innosystec.unrar.Archive.setFile(Archive.java:122)at de.innosystec.unrar.Archive.<init>(Archive.java:106)at de.innosystec.unrar.Archive.<init>(Archive.java:96)at com.reverse.zipFile.CopyOfZipFileUtil.unrar(CopyOfZipFileUtil.java:242)at com.reverse.zipFile.CopyOfZipFileUtil.main(CopyOfZipFileUtil.java:303)借助百度、⾕歌找资料发现:1、java解压⽂件有两种⽅式,⼀是⾃⼰写代码,⼆是调⽤压缩软件CMD执⾏2、第⼆个错误是由于WinRAR5之后,在rar格式的基础上,推出了另⼀种rar,叫RAR5,⽽java-unrar解析不了这种格式查看rar格式属性可以通过右键 —> 属性查看,如图因此需要舍弃代码解压的⽅式,改为CMD调⽤的⽅式,虽然压缩软件有很多,但从⽹上能找到执⾏命令的,也就WinRAR了,所以我们采⽤WinRAR5之后的版本解决,5之前的版本肯定是不⾏的了使⽤cmd⽅式效果如何呢?既能解决中⽂乱码问题,⼜能解压RAR5压缩⽂件,⽽且代码量还更少了,⽀持的格式也更多了。
Java代码实现rar解压最全攻略操作
yum install rar
2、 linux中 安 装 unrar
①上传unrar到linux服务器
如 /usr 路径
②解压到指定路径:
tar -zxf /usr/rarlinux-x64-5.7.1.tar.gz -C /usr/local/
③建立软连接:必须要有软连接,类似于jdk的环境变量,保证可以在任意目录下使用rar和unrar命令
首先非常感谢下面几位链接上的支持之所以写这篇博文主要在于总结同时给第一次实现该功能的同学提供完整的参考
Java代码实现 rar解压最全攻略操作
一、通过[com.github.junrar]实现winrar5.0以下版本解压 1、首先贴出来maven依赖,这里使用的是最高版本4.0,但是依然无法解决5.0及其以上的版本问题。
}else{ result = RequestResult.error("上传rar压缩包解压失败!");
} }catch (Exception e) {
e.printStackTrace(); result = RequestResult.error("上传文件异常,异常原因:" + e.getMessage()); }finally { //删除文件和文件压缩包 FileUtils.DeleteFolder(zipPath); }
<!-- https:///artifact/com.github.junrar/junrar --> <dependency>
<groupId>com.github.junrar</groupId> <artifactId>junrar</artifactId> <version>4.0.0</version> </dependency>
java解压代码
Java解压代码1. 简介在日常开发过程中,我们经常会遇到需要对文件进行解压缩的情况。
Java提供了多种方式来解压文件,本文将详细介绍Java解压代码的实现方法和常用技巧。
2. 解压方式Java提供了多种解压方式,包括使用ZipInputStream和ZipEntry类、使用Java.util.zip包、使用第三方库等。
下面将详细介绍这些方式的使用方法。
2.1 使用ZipInputStream和ZipEntry类ZipInputStream和ZipEntry类是Java提供的用于处理Zip文件的工具类。
通过ZipInputStream可以逐个读取Zip文件中的Entry,并将其解压到指定目录。
下面是一个使用ZipInputStream和ZipEntry类解压Zip文件的示例代码:import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;import java.io.FileOutputStream;import java.io.IOException;public class UnzipExample {public static void main(String[] args) {String zipFilePath = "path/to/your/zip/file.zip";String destDir = "path/to/your/destination/directory/";try (ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zip FilePath))) {ZipEntry entry = zipIn.getNextEntry();while (entry != null) {String filePath = destDir + File.separator + entry.getName();if (!entry.isDirectory()) {extractFile(zipIn, filePath);} else {File dir = new File(filePath);dir.mkdirs();}zipIn.closeEntry();entry = zipIn.getNextEntry();}} catch (IOException e) {e.printStackTrace();}}private static void extractFile(ZipInputStream zipIn, String filePath) thr ows IOException {try (FileOutputStream fos = new FileOutputStream(filePath)) {byte[] buffer = new byte[1024];int len;while ((len = zipIn.read(buffer)) > 0) {fos.write(buffer, 0, len);}}}}以上代码将解压指定路径下的Zip文件到目标目录。
如何在Java中进行文件压缩和解压缩操作
如何在Java中进行文件压缩和解压缩操作文件压缩和解压缩是程序开发中常见的操作,通过压缩可以减小文件的大小,节省存储空间,并且可以快速传输文件。
Java中提供了多种压缩和解压缩文件的方式,如ZipOutputStream和ZipInputStream等类。
本文将详细介绍在Java中进行文件压缩和解压缩的操作步骤和示例代码。
一、文件压缩文件压缩是将一个或多个文件打包成一个压缩文件,常见的压缩文件格式包括zip、tar、gz等。
在Java中,通常使用ZipOutputStream类实现文件压缩操作。
ZipOutputStream类是用于写入ZIP文件的输出流。
1.创建ZipOutputStream对象首先需要创建一个ZipOutputStream对象,用于写入ZIP文件。
可以通过FileOutputStream将ZipOutputStream链接到一个文件,然后就可以向文件中写入压缩数据。
```javaFileOutputStream fos = newFileOutputStream("compressed.zip");ZipOutputStream zos = new ZipOutputStream(fos);```2.添加文件到压缩文件接下来需要将要压缩的文件添加到ZipOutputStream中。
可以通过ZipEntry对象表示压缩文件中的每个文件或目录,并使用putNextEntry方法将文件添加到压缩文件中。
```javaFile file1 = new File("file1.txt");ZipEntry entry1 = new ZipEntry(file1.getName());zos.putNextEntry(entry1);FileInputStream fis1 = new FileInputStream(file1);byte[] buffer = new byte[1024];int length;while ((length = fis1.read(buffer)) > 0) {zos.write(buffer, 0, length);}zos.closeEntry();fis1.close();```3.完成压缩完成文件的添加后,需要关闭ZipOutputStream,以确保压缩文件保存到磁盘。
java 中调用命令行的的函数
在Java中调用命令行的函数一、背景介绍在开发过程中,有时候需要在Java代码中调用命令行来执行一些操作,比如执行系统命令、调用外部程序等。
本文将介绍在Java中如何调用命令行的函数,以及一些注意事项。
二、Runtime类和Process类在Java中,可以使用Runtime类和Process类来执行命令行。
Runtime类代表了应用程序的运行时环境,可以通过调用Runtime类的getRuntime()方法来获取当前的运行时。
而Process类则代表了一个正在运行的子进程,并提供了许多方法来控制该子进程的输入、输出和状态。
三、调用命令行的方法1. 使用exec()方法Runtime类提供了一个exec()方法来执行命令行。
这个方法接收一个String类型的参数,表示要执行的命令行。
例如:```javaRuntime.getRuntime().exec("ls -l");```上面的代码会执行一个名为"ls -l"的命令行,然后将其输出打印到控制台。
2. 获取命令行的输出如果想要获取命令行的输出,可以使用Process类的getInputStream()方法来获取输入流,然后通过读取输入流来获取输出内容。
例如:```javaProcess process = Runtime.getRuntime().exec("ls -l"); InputStream inputStream = process.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));String line;while ((line = reader.readLine()) != null) {System.out.println(line);}```上面的代码会执行一个"ls -l"命令行,并将其输出逐行打印到控制台。
Java版的WinRAR工具
最近做个东西,需要强大的Java版压缩组建支持,可惜没有开源的,最后实在没办法了。
决定自己实现个,反正JDK中提供了最基础的API.
标题说WinRAR工具,夸大了,还没WinRAR那么强大,仅仅是一个zip工具组建,没有GUI界面,只有工具方法。
目标:
实现一个像WinRAR、WinZip一样可以同时混合压缩或者解压缩文件和文件夹的工具。
目前仅支持zip文件,因为SUN Java API仅支持zip和gzip两种格式,gzip就像玩具枪,不中用,就不说了,下面是实现代码。
实现:
寥寥不到百行代码就搞定了,难点在于一个递归算法。
代码:
测试代码:
运行结果:
压缩成功!Process finished with exit code0呵呵,经过查看,没问题,就是注释乱码。
经过反复测试,发现中文支持有问题。
google了一下解决方案,用ant包中的两个类
//import org.apache.tools.zip.ZipEntry;
//import org.apache.tools.zip.ZipOutputStream;
替换Java包的对应的两个类
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
即可完美支持中文。
注:如果大家觉得图片版易读但不易用,想得到本文源代码,可以在原日志评论中留下邮箱,我会尽量一一发送到的。
java实现文件夹解压和压缩
java实现⽂件夹解压和压缩本⽂实例为⼤家分享了java实现⽂件夹解压和压缩的具体代码,供⼤家参考,具体内容如下效果实现多个⽂件以及⽂件夹的压缩和解压代码分析import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;import java.util.zip.ZipOutputStream;public class Main {public static void main(String[] args) throws IOException {//解决中⽂乱码//压缩参数改成你⾃⼰的源⽂件路径和压缩后的⽂件路径//yasuo("C:\\file\\", "C:\\file.zip");//解压参数改成你⾃⼰的源⽂件路径和解压后的⽂件路径jieya("C:\\file.zip", "C:\\file\\");}public static void jieya(String zipPath, String path) throws IOException, FileNotFoundException {//创建解压后的⽂件夹File pt=new File(path.substring(0,path.length()-1));if(!pt.exists()) {pt.mkdirs();}//try(resource)来保证InputStream正确关闭try(ZipInputStream zip=new ZipInputStream(new FileInputStream(zipPath))){//ZipEntry表⽰⼀个压缩⽂件或⽬录ZipEntry entry;while((entry=zip.getNextEntry())!=null) {String name=entry.getName();//压缩⽂件if(!(entry.getName().contains(File.separator))) {FileOutputStream file= new FileOutputStream( path+ name);int n=0;while((n=zip.read())!=-1) {file.write(n);}}else {//⽬录int index=stIndexOf("\\");File file= new File(path+ name.substring(0,index));if(!file.exists()) {file.mkdirs();}//如果不是空⽬录if(index!=name.length()-1) {FileOutputStream f= new FileOutputStream( path+ name);int n=0;while((n=zip.read())!=-1) {f.write(n);}}}}zip.closeEntry();}}public static void yasuo(String path, String zipPath) throws IOException, FileNotFoundException {File zp=new File(zipPath);if(!zp.exists()) {zp.createNewFile();}try(ZipOutputStream zip=new ZipOutputStream(new FileOutputStream(zp))) {File files= new File(path);File[] f=files.listFiles();for (File file : f) {zipAll(zip, file,file.getName());}}}public static void zipAll(ZipOutputStream zip, File files,String name) throws IOException, FileNotFoundException { if(files.isDirectory()) {File[] files2=files.listFiles();if(files2.length==0||files2==null) {zip.putNextEntry(new ZipEntry(name+File.separator));}else{for (File file2 : files2) {if(file2.isFile()) {zip.putNextEntry(new ZipEntry(name+File.separator+file2.getName()));int n;FileInputStream input=new FileInputStream(file2);while((n=input.read())!=-1) {zip.write(n);}}else {zipAll(zip,file2,name+File.separator+file2.getName());}}}}else {zip.putNextEntry(new ZipEntry(name));int n;FileInputStream input=new FileInputStream(files);while ((n=input.read())!=-1) {zip.write(n);}}}}⼩结压缩ZipOutputStream可以把多份数据写⼊zip包;解压ZipInputStream可以读取zip格式的流;以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
java解压rar 高效解压
java解压rar有的用cmd命令行调用winrar.exe,这其实是一个很不好的方法,主要理由如下:1:会出现解压的页面2:如果压缩包有错误,会弹出解压警告框。
其实有一个unrar.jar可以实现解压,但是网上很多的用法都是不对的,我这里参考了一些资料写了一个。
/*** 根据原始rar路径,解压到指定文件夹下.* @param srcRarPath 原始rar路径* @param dstDirectoryPath 解压到的文件夹*/public static void unRarFile(String srcRarPath, String dstDirectoryPath) {if (!srcRarPath.toLowerCase().endsWith(".rar")) {System.out.println("非rar文件!");return;}File dstDiretory = new File(dstDirectoryPath);if (!dstDiretory.exists()) { //目标目录不存在时,创建该文件夹dstDiretory.mkdirs();}Archive a = null;try {a = new Archive(new File(srcRarPath));if (a != null) {a.getMainHeader().print(); //打印文件信息.FileHeader fh = a.nextFileHeader();while (fh != null) {if (fh.isDirectory()) { //文件夹File fol = new File(dstDirectoryPath + File.separator + fh.getFileNameString());fol.mkdirs();} else { //文件File out = new File(dstDirectoryPath + File.separator + fh.getFileNameString().trim());System.out.println(out.getAbsolutePath());try {//之所以这么写try,是因为万一这里面有了异常,不影响继续解压.if (!out.exists()) {if (!out.getParentFile().exists()) {//相对路径可能多级,可能需要创建父目录.out.getParentFile().mkdirs();}out.createNewFile();}FileOutputStream os = new FileOutputStream(out);a.extractFile(fh, os);os.close();} catch (Exception ex) {ex.printStackTrace();}}fh = a.nextFileHeader();}a.close();}} catch (Exception e) {e.printStackTrace();}}有可能在实际应用中会遇到ng.OutOfMemoryError: Java heap space,这主要是因为解压比较大的rar文件时,内存消耗过大所致。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Process p = rt.exec(exec);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(), "gbk"));
String exec = RARCMD + " " + RARRealpath + " " + fileName;
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(exec);
// 三级选项卡当前页面顺序序号 防止查询后串页
private String currPageIndex= "";
小弟菜鸟,现在在给客户做一个java程序调用winRAR命令行,生成一个压缩包,供用户下载的功能。现在这个功能倒是完成了,但是有个问题,那就是如果需要添加进压缩包的附件比较大,比如说超过了5M,则winrar程序一直在运行,不能正常退出,导致java主程序一直被挂起,用户打包下载rar压缩包失败。
// 当前线程等待该process结束,既挂起主线程
p.waitFor();
}
如果我这么调用:
RARFile("D:\Program Files\WinRAR\Rar.exe a -ep", "d:\\字符串2", "d:\\download.rar");
if (fileName == null) {
return;
}
fileName = fileName.trim();
if (fileName.equals("")) {
return;
}
String exec = RARCMD + " " + RARRealpath + " " + fileName;
while ((line = br.readLine()) != null) {
//System.err.println(line);
}
// 当前线程等待该process结束,既挂起主线程
p.waitFor();
}
其中待添加进压缩包“d:\\download.rar”的文件"d:\\字符串2",如果文件"d:\\字符串2",超过5M(没有精确测试多大,但是超过5M肯定就不行了),那么,程序执行到
p.waitFor();
就不动弹了,打开任务管理器,可以看到Rar.exe一直在运行,不会自行结束。这样的话,java当前的线程一直被挂起,导致用户下载rar压缩包失败。
但是相同的winRAR命令行,比如说:
D:\Program Files\WinRAR\Rar.exe a -ep d:\\download.rar d:\\字符串2
在cmd下执行,却任何问题没有,不用几秒就压缩完毕,打开任务管理器,Rar.exe也正常退出,在D盘根目录下,也正确的生成了“download.rar”压缩包。
小文件一下就压缩完成了, 所以可以, 但是文件大了, winrar会输出压缩的百分比信息, 需要将这些信息读取出来, 否则输出流阻塞了, winrar处于等待状态...
public static void RARFile(String RARCMD, String fileName, String RARRealpath) throws Exception {
if (fileName == null) {
return;
}
fileName = fileName.trim();
if (fileName.equals("")) {
retur行rar命令行,和在java里执行相同的命令行,Rar.exe有不同的反应,如果需要压缩的文件比较大(超过5M),则在java里就不行。请教各位高手,这个问题应该怎么解决?
对了,winRAR的版本是3.92
采纳的答案
2010-05-21 yy629 (资深程序员)
String line;
while ((line = br.readLine()) != null) {
//System.out.println(line);
}
br = new BufferedReader(new InputStreamReader(p.getErrorStream(), "gbk"));
* @param RARRealpath 压缩后的压缩文件存放路径,包含文件名
* @throws Exception
*/
public static void RARFile(String RARCMD, String fileName, String RARRealpath) throws Exception {
代码如下:
/**
* 每次只是添加一个文件进压缩包,这样做没出现过问题
* @param RARCMD winrar进行压缩的命令行,格式为 D:\Program Files\WinRAR\Rar.exe a -ep
* @param fileName 需要压缩的文件名(必须包含路径) ,如果该参数为null或者为空字符串,则直接返回,不做任何事