锁定老帖子 主题:java调用Oracle EXP
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-28
一眼看过去相信大家都知道用Runtime.getRuntime().exec来调用,我的需求就是:
写完收工,执行,傻了,进程被挂S了,到底什么原因呢,开始瞎尝试,把读取process的InputStream的部分全部去掉,执行,竟然OK,更晕,但这个时候出现了一个问题,那就是没法知道什么时候备份文件完全生成了,如果在Runtime.getRuntime后去获取备份文件,那个时候甚至连备份文件都没生成,之后甚至尝试过轮询直到备份文件生成,再往下走,那样还是有问题,就是生成的那个备份文件永远都只有正常的一半的大小,只有在整个进程退出的时候它才正常的全部生成。 String[] cmds = new String[3];
cmds[0] = "cmd"; cmds[1] = "/C"; cmds[2]=commandBuf.toString(); Process process=Runtime.getRuntime().exec(cmds); boolean shouldClose=false; try { InputStreamReader isr = new InputStreamReader(process.getErrorStream()); BufferedReader br = new BufferedReader(isr); String line = null; while ((line = br.readLine()) != null){ if(line.indexOf("错误")!=-1){ shouldClose=true; break; } } } catch (IOException ioe) { shouldClose=true; } if(shouldClose) process.destroy(); int exitVal = process.waitFor(); 当然,实际的代码中不能像这里写的一样,直接去判断是否含错误这个字符串,而且这段代码是只适合在winnt版本以上的windows操作系统上执行的。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-05-28
感觉应该waitFor()等待,另一个线程同步去读取InputStream, ErrorStream
new Thread() { // 监控,读取inputStream } int exitVal= process.waitFor(); process.destroy(); |
|
返回顶楼 | |
浏览 1518 次