//最近一两天突然想写一个可以从rar文件中提取文件的程序,具体的代码如下:
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
private static ArrayList<File> myFile = new ArrayList<File>();
private String flag = "flag";
private ArrayList<File> tempFile = new ArrayList<File>();
private Process pro;
public void rarFile(String src, String name) {// src表示当前路径,
Pattern p = Pattern.compile(".*\\.rar$");
Matcher m = p.matcher(name);
if (m.matches()) {
synchronized (this) {
try {
//解压文件
pro = Runtime.getRuntime().exec(
"cmd /c start winrar x " + src + "\\" + name
+ " -r " + "" + src);
} catch (IOException e) {
e.printStackTrace();
}
/*如何让主线程等待pro执行玩后在继续执行呢?*/
int index = name.lastIndexOf(".");
String fileName = name.substring(0, index);
File ff = new File(src + "\\" + fileName);
getFile(ff);
tempFile.add(ff);
}
}
}
//获取文件
public void getFile(File f) {
// System.out.println(f);
if (f.isDirectory()) {
File[] list = f.listFiles();
for (int i = 0; i < list.length; i++)
getFile(list[i]);
} else {
String name = f.getName();
String pattern = ".*\\.rar$|.*\\.pdf$";//提取pdf文件和rar文件
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(name);
if (m.matches()) {
String str = ".*\\.pdf$";
p = Pattern.compile(str);
m = p.matcher(name);
if (m.matches()) {
myFile.add(f);
} else {
rarFile(f.getParent(), f.getName());
}
}
}
}
public static void main(String[] args) {
Test tt = new Test();
tt.getFile(new File("f:\\test"));
Iterator<File> it = myFile.iterator();
while (it.hasNext())
System.out.println(it.next());
}
}
如何使主线程等待pro执行完毕在继续往下执行呢?参阅了网上的很多方法,还是不行...