java调用Runtime.getRuntime().exec执行解压RAR压缩包时只能在系统刚启动时解压一次,应该怎么解决?

问题描述

Processp=Runtime.getRuntime().exec(unrarCmd);iState=p.waitFor();核心语句就是上面两句,语句都正确,但只有在Tamcat重启时才能正常解压一次,很是郁闷,不知道怎么解决,如有高手赐教,不胜感激。

解决方案

解决方案二:
该回复于2010-01-30 22:55:22被版主删除
解决方案三:
路过,两行代码看不出什么问题,整个流程贴出来还差不多
解决方案四:
....代码给的太少了,给你个能用的解压缩例子。java解压缩文件importjava.io.*;importjava.util.*;importjava.util.zip.*;publicclassUnzip{publicstaticvoidmain(String[]args){Stringunzipfile="d:\test\test.zip";//解压缩的文件名try{Fileolddirec=newFile(unzipfile);//解压缩的文件路径(为了获取路径)ZipInputStreamzin=newZipInputStream(newFileInputStream(unzipfile));ZipEntryentry;//创建文件夹while((entry=zin.getNextEntry())!=null){if(entry.isDirectory()){Filedirectory=newFile(olddirec.getParent(),entry.getName());if(!directory.exists())if(!directory.mkdirs())System.exit(0);zin.closeEntry();}if(!entry.isDirectory()){FilemyFile=newFile(entry.getName());FileOutputStreamfout=newFileOutputStream("d:\test\"+myFile.getPath());DataOutputStreamdout=newDataOutputStream(fout);byte[]b=newbyte[1024];intlen=0;while((len=zin.read(b))!=-1){dout.write(b,0,len);}dout.close();fout.close();zin.closeEntry();}}}catch(IOExceptione){e.printStackTrace();System.out.println(e);}}}

解决方案五:
在java中调用操作系统的程序时,可以使用java.lang.Runtime.getRuntime().exec()来实现,但是这个方法在调用命令后就直接返回当前线程了;程序设计时,有时候需要在等待调用的系统程序完成操作后,当前线程才能做下一步操作,此时可以用类Process的方法waitFor()来实现,它会阻塞当先线程直至调用程序运行结束Java代码java.lang.Processprocess=java.lang.Runtime.getRuntime().exec("");//执行命令生成cubetry{process.waitFor();}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}proc_stat=checkFileSize()?"1":"3";java.lang.Processprocess=java.lang.Runtime.getRuntime().exec("");//执行命令生成cubetry{process.waitFor();}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}proc_stat=checkFileSize()?"1":"3";Process的方法waitFor()介绍,取自API文档:waitForpublicabstractintwaitFor()throwsInterruptedException导致当前线程等待,如果必要,一直要等到由该Process对象表示的进程已经终止。如果已终止该子进程,此方法立即返回。如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程。返回:进程的出口值。根据惯例,0表示正常终止。抛出:InterruptedException-如果当前线程在等待时被另一线程中断,则停止等待,抛出InterruptedException。转载的,看看有帮助没有
解决方案六:
会不会发生I/O时等待输入参数之类的?
解决方案七:
引用3楼sotom的回复:

....代码给的太少了,给你个能用的解压缩例子。java解压缩文件Javacodeimportjava.io.*;importjava.util.*;importjava.util.zip.*;publicclassUnzip{publicstaticvoidmain(String[]args){Stringunzipfile="d:\test\test.zip";//解压缩的文件名try{Fileolddirec=newFile(unzipfile);//解压缩的文件路径(为了获取路径)ZipInputStreamzin=newZipInputStream(newFileInputStream(unzipfile));ZipEntryentry;//创建文件夹while((entry=zin.getNextEntry())!=null){if(entry.isDirectory()){Filedirectory=newFile(olddirec.getParent(),entry.getName());if(!directory.exists())if(!directory.mkdirs())System.exit(0);zin.closeEntry();}if(!entry.isDirectory()){FilemyFile=newFile(entry.getName());FileOutputStreamfout=newFileOutputStream("d:\test\"+myFile.getPath());DataOutputStreamdout=newDataOutputStream(fout);byte[]b=newbyte[1024];intlen=0;while((len=zin.read(b))!=-1){dout.write(b,0,len);}dout.close();fout.close();zin.closeEntry();}}}catch(IOExceptione){e.printStackTrace();System.out.println(e);}}}

学习了
解决方案八:
我的程序也有这个问题,我在网上找了很多资料,才查到,在jdk1.4以后,waitfor()之前必须要执行接受outputsream的动作,否则,命令执行出错时,会挂在那里在waitfor()之前,先执行p.getErrorStream();p.getInputStream();完成读取outputsream的动作,而且一定记得p.getErrorStream();和p.getInputStream();顺序是不能颠倒的。我现在也在测试,因为环境无法模拟,所以正在等待结果。

时间: 2024-10-31 09:57:54

java调用Runtime.getRuntime().exec执行解压RAR压缩包时只能在系统刚启动时解压一次,应该怎么解决?的相关文章

在java中用Runtime.getRuntime().exec(cmd)问题

问题描述 在java中用Runtime.getRuntime().exec(cmd)问题 在cmd指定,是持续读取数据时,总是要延迟一段时间后,一下子出现之前的信息后,又要延迟一会,感觉到信息满一定量后能读取 解决方案 Runtime.getRuntime().exec(cmd) cd关于java Runtime.getRunTime.exec(String command)的使用关于java Runtime.getRunTime.exec(String command)的使用

jsp,Runtime.getRuntime().exec("sudo ifconfig eth0 192.168.1.103")出错

问题描述 各位大侠,救命LINUXUBANTU环境下,java语句Runtime.getRuntime().exec("sudoifconfigeth0192.168.1.103")时,系统会在linux终端提示输入密码,可输入密码还是不行.于是就是修改了/etc/sudoers文件,这样直接在linux终端sudoifconfigeth0192.168.1.103时,可以成功修改系统的IP地址,并且不用再输入密码.可是用java语句Runtime.getRuntime().exec(

cmd-关于android 调用外部命令的问题(Runtime.getRuntime().exec参数)

问题描述 关于android 调用外部命令的问题(Runtime.getRuntime().exec参数) android 调用外部命令的问题(Runtime.getRuntime().exec参数)调用ls还有cat命名是没问题的,但是有些命令用不了,例如ll,打印显示环境有问题,不知道怎么解? 代码:private String ssss() { String TAG2 = ""CMD""; try { String cmd=""ls&quo

请教Runtime.getRuntime().exec调用cmd时命令中有特殊字符的问题

问题描述 先看段代码Processp=Runtime.getRuntime().exec("cmd.exe/cwmic/node:127.0.0.1/user:administrator/password:123@&123cpuget");BufferdeReaderb=newBufferedReader(newInputStreamReader(process.getInputStream()));这段代码是java调用cmd执行wmic的命令获取远程目标的信息,该命令直接在

java类的问题-一个关于java Runtime.getRuntime.exec()的问题

问题描述 一个关于java Runtime.getRuntime.exec()的问题 比如 public class test { public static void main(String []args) { Runtime.getRuntime.exec("notepad") } } 我启动了一个记事本程序,如果我不关闭记事本程序,这个java程序是不会关闭的,求让记事本程序启动后程序就关闭的方法!!! 解决方案 网上用 java.awt.Desktop.getDesktop()

websphere 部署 java程序,Runtime.getRuntime().exec()

问题描述 websphere 部署 java程序,Runtime.getRuntime().exec() 使用Runtime.getRuntime().exec(""cmd.exe /c start D:11.doc""); 命令,在tomcat下调试是正常的,可以打开word文档,但是部署到WebSphere上,不报错,任务管理器也有word进程,但是word文档没有打开:求解 解决方案 使用ProcessBuilder.inheritIO看看到底是输出什么错误

java-android Runtime.getRuntime.exec()方法调用tcpdump抓包但文件无法保存

问题描述 android Runtime.getRuntime.exec()方法调用tcpdump抓包但文件无法保存 android内置程序调用tcpdump: Runtime.getRuntime().exec("/data/local/tcpdump -XvvennSs 0 -w /mnt/sdcard/cap.pcap -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854 or tcp[20:2]=0x504f"); 该命令在cmd上可行,但让

使用Runtime.getRuntime().exec()方法的几个陷阱 (转)

Process 子类的一个实例,该实例可用来控制进程并获得相关信息.Process 类提供了执行从进程输入.执行输出到进程.等待进程完成.检查进程的退出状态以及销毁(杀掉)进程的方法. 创建进程的方法可能无法针对某些本机平台上的特定进程很好地工作,比如,本机窗口进程,守护进程,Microsoft Windows 上的 Win16/DOS 进程,或者 shell 脚本.创建的子进程没有自己的终端或控制台. 它的所有标准 io(即 stdin.stdout 和 stderr)操作都将通过三个流 (g

Runtime.getRuntime().exec的问题???

问题描述 我要用java实现的功能是定时监控一个路径下是否有文件,如果有就sqlldr该数据文件,导入完成后把这个文件再删除.我用Runtime.getRuntime().exec新建了一个线程去执行sqlldr,但是它并不是马上去执行,这样我在程序中直接用File.delete()就会把数据文件删除了,等sqlldr时文件就不存在.请问哪位高手指教一下怎么解决.怎么能让这个线程马上执行?