我有一段java代码,正在编写一个Linux bash脚本,然后做一个chmod来添加执行权限,然后尝试执行它。在进程开始时,我收到IOException,说错误= 26,文本文件忙。 我已验证文件已完成写入并且流已关闭。该chmod工作正常,但我不断收到此错误。java正在执行bash脚本,错误= 26文本文件正忙
我注意到,如果我运行一个调试器,并通过代码一步,它没有得到错误,所以很明显有一个时间问题。在我尝试执行bash脚本之前,如何确保chmod已完成?我想避免像加入Thread.sleep(10000)这样的非可靠解决方案,以及将try/catch块中的执行放入尝试直到成功的循环内的“hacky”。
我的代码包装过程的启动与听线程等公正的量,但这里是它是做什么的简化版本(尝试这种代码也和它有相同的结果):
String[] cmd1 = {"/bin/chmod", "750", postFile };
new ProcessBuilder(cmd1).redirectErrorStream(true).start().waitFor();
String[] cmd2 = { postFile };
new ProcessBuilder(cmd2).redirectErrorStream(true).start().waitFor();
每次执行后,“postFile”都有正确的750个权限,但它没有执行(由于IOException)。
我们可以有一些代码吗?就像你执行你的chmod的方式一样?谢谢 – talnicolas 2011-06-14 15:09:40
仔细检查您没有在多个位置打开文件。 – 2011-06-14 16:34:49
谢谢你。我有同样的问题,并有一个完全无关的,并处理了打开文件,但没有关闭它的类。 – AdamOutler 2013-02-17 21:19:15