代码如下:
public class Test1 { public static void main(String[] args) throws IOException, InterruptedException {
Process proc = null;
 String line=null;
BufferedReader br = null; 
proc = Runtime.getRuntime().exec("svnadmin dump F:/Repositories/TestRepo > d:/abc.svn");
Test2 t1 =new Test2(proc.getInputStream(),"stand");
Test2 t2 = new Test2(proc.getErrorStream(),"error");
t1.start();
t2.start();
int   exitVal   =   proc.waitFor(); 
System.out.println(exitVal);
}


}class Test2 extends Thread{

InputStream is;
String type;
public Test2(InputStream temp,String type){
this.is = temp;
this.type = type;
}

public void run(){
String line="";
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);; 
try {
while ((line = br.readLine()) != null){
 if(line.trim().length() > 0){
if("error".equals(type)){
System.out.println(line);
}
 }
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}控制台显示结果:
* 已转存版本 0。
* 已转存版本 1。
* 已转存版本 2。
* 已转存版本 3。
* 已转存版本 4。
* 已转存版本 5。
* 已转存版本 6。
0但是程序执行完毕后,并没有在d盘生成abc.svn这个文件。请问这是什么原因?
我把那条svn备份语句直接在cmd里执行,就没有问题

解决方案 »

  1.   

    貌似是exec方法直接把svnadmin dump F:/Repositories/TestRepo > d:/abc.svn 后面的
    > d:/abc.svn 给忽略掉了,难道>是特殊字符,还是两个路径有问题?
      

  2.   

    执行的命令较长,里面包括多空格,多符号时有可能是执行失败。
    LZ可以用将执行的命令写成批处理文件,然后执行批处理文件即可,这样顺便也实现解耦了,还保险。比如:
    String commandStr = "oper.bat";
    Process process = Runtime.getRuntime().exec(commandStr);把svnadmin dump F:/Repositories/TestRepo > d:/abc.svn 写到oper.bat中