java Runtime.getRuntime().exec(command)的奇怪问题,请高手解惑
publicclassTest{publicstaticvoidmain(String[]args){Runtimert=Runtime.getRuntime();Pro...
public class Test {
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
Process p = null;
try {
System.out.println("删除前:");
p = rt.exec("cmd /c del d:\\112.txt");
System.out.println("删除后:");
} catch (IOException e) {
e.printStackTrace();
}
if (p != null) {
p.destroy();
p = null;
}
}
}
上面的代码是调用系统cmd命令删除D盘112.txt文件
我右键run as java application运行,文件删不掉,但是“删除前:”和“删除后:”都打印出来了
右键debug as java application一步一步运行就可以删除了
这是为什么呢,好奇怪啊 展开
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
Process p = null;
try {
System.out.println("删除前:");
p = rt.exec("cmd /c del d:\\112.txt");
System.out.println("删除后:");
} catch (IOException e) {
e.printStackTrace();
}
if (p != null) {
p.destroy();
p = null;
}
}
}
上面的代码是调用系统cmd命令删除D盘112.txt文件
我右键run as java application运行,文件删不掉,但是“删除前:”和“删除后:”都打印出来了
右键debug as java application一步一步运行就可以删除了
这是为什么呢,好奇怪啊 展开
2个回答
展开全部
这种第一要看看是不是权限问题,比如win7等操作系统上可能你没有操作这个文件的权限;第二要看文件是不是被别的软件给锁住了,这种也删除不了。
可以打印p.exitValue()来看看
可以打印p.exitValue()来看看
追问
System.out.println("删除后:");
System.out.println(p.exitValue());
这样加了,直接运行报
java.lang.IllegalThreadStateException: process has not exited
但是debug后按F6一步一步执行,打印:
删除前:
删除后:
0
并且把文件删除了
追答
System.out.println(process.waitFor());// 等待执行完成,并查看结果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
加上这个试试
process.waitFor( );
process.waitFor( );
追问
高手啊,解决了!
我去查了下process.waitFor();
解释是:导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。
那是不是说rt.exec();还没执行完,该进程就被destroy了;
想到这,我就把下面的
p.destroy();
p = null;
删掉了,然后不加process.waitFor()也对了。
追答
是这个道理,之前我做的一个程序需要获取CMD返回值,发现就是这个原因,线程终止导致返回值取不到
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询