在百度上找的一段解压缩rar文件的代码,如何判断压缩包已经解压完成呢?
解压完成后我还须要执行另外一些代码,比如我要获得解压出来的文件的文件名,调用这个方法后直接调用获得文件名的方法是获得不了的,因为压缩包中的文件还没解压出来当然就获得不了了。
如何才能在解压完成后,在执行其他方法呢? /**
* 将1个RAR文件解压
* rarFileName 需要解压的RAR文件(必须包含路径信息以及后缀)
* destDir 解压后的文件放置目录
*/
public static void unRARFile(String rarFileName, String destDir) {
if (!rarFileName.toLowerCase().endsWith(".rar")) {
System.out.println("非rar文件!");
return;
}
unrarCmd +=" "+ rarFileName + " " + destDir;
try {
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(unrarCmd);
} catch (Exception e) {
System.out.println("e.getMessage()="+e.getMessage());
}
}
解压完成后我还须要执行另外一些代码,比如我要获得解压出来的文件的文件名,调用这个方法后直接调用获得文件名的方法是获得不了的,因为压缩包中的文件还没解压出来当然就获得不了了。
如何才能在解压完成后,在执行其他方法呢? /**
* 将1个RAR文件解压
* rarFileName 需要解压的RAR文件(必须包含路径信息以及后缀)
* destDir 解压后的文件放置目录
*/
public static void unRARFile(String rarFileName, String destDir) {
if (!rarFileName.toLowerCase().endsWith(".rar")) {
System.out.println("非rar文件!");
return;
}
unrarCmd +=" "+ rarFileName + " " + destDir;
try {
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(unrarCmd);
} catch (Exception e) {
System.out.println("e.getMessage()="+e.getMessage());
}
}
private static String unrarCmd = "C:\\Program Files\\WinRAR\\unrar.exe x ";
for(int i=0;i<1000000;i++){
String s="1";
s+="1";
}
解压一个比较小的rar包,可以获得解压出来的文件名,不加的话获得不了,楼上说的加返回值的方法也试了,不行,所以我确定 我在6楼说的应该是对的
p.waitFor();
但是刚才在本机上用rar.exe测试的时候一直不停止了. 你可以在你的代码中加入p.waitFor()然后看看.
设置正确以后就好了. p.waitFor()会在解压完成后有个返回值. 这个返回值和p.exitValue()相同.
成功结束为0
* 根据winrar的文档推荐使用rar.exe, 另外加入参数-y在你需要选择的时候自动输入y
* 否则代码中要加入当winrar询问时的处理, 不然你的主进程将会被柱塞.
*/
private static String unrarCmd = "C:\\Program Files\\WinRAR\\rar.exe x -y";
/**
* 将1个RAR文件解压
* rarFileName 需要解压的RAR文件(必须包含路径信息以及后缀)
* destDir 解压后的文件放置目录
*/
public static void unRARFile(String rarFileName, String destDir) {
if (!rarFileName.toLowerCase().endsWith(".rar")) {
System.out.println("非rar文件!");
return;
}
unrarCmd +=" "+ rarFileName + " " + destDir;
Runtime rt = null;
Process p = null;
int result;
try {
rt = Runtime.getRuntime();
p = rt.exec(unrarCmd);
result = p.waitFor(); // 这一句将使你的当前主进程等待执行结束后才会继续执行后面代码.
/**
* 或者使用如下代码代替上面result = p.waitFor();
* InputStream in = null;
* InputStreamReader ir = null;
* BufferedReader reader = null;
* try {
* in = p.getInputStream();
* ir = new InputStreamReader(in, "gbk");
* //一般默认中文windows操作系统都是gbk字符集, 请根据你自己系统进行更改.
* reader = new BufferedReader(ir);
* String inStr = null;
* while ( (inStr = reader.readLine()) != null ) {
* System.out.println(inStr);
* }
* result = p.exitValue();
* } catch(Exception e) {
* e.printStackTrace();
* } finally {
* // 关闭之前的输入流什么的代码
* }
*/
if ( result != 0 ) {
System.out.println("解压失败");
}
} catch (Exception e) {
System.out.println("e.getMessage()="+e.getMessage());
}
}
这里有,
接分