如何在从java执行cmd命令后定期检查文件?
我使用下面的代码从java运行cmd命令(代码采用自) 同步管道等级:如何在从java执行cmd命令后定期检查文件?,java,cmd,Java,Cmd,我使用下面的代码从java运行cmd命令(代码采用自) 同步管道等级: class SyncPipe implements Runnable { public SyncPipe(InputStream istrm, OutputStream ostrm) { istrm_ = istrm; ostrm_ = ostrm; } public void run() { try { final byte[] buffer =
class SyncPipe implements Runnable
{
public SyncPipe(InputStream istrm, OutputStream ostrm) {
istrm_ = istrm;
ostrm_ = ostrm;
}
public void run() {
try
{
final byte[] buffer = new byte[1024];
for (int length = 0; (length = istrm_.read(buffer)) != -1; )
{
ostrm_.write(buffer, 0, length);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private final OutputStream ostrm_;
private final InputStream istrm_;
}
此代码工作正常,执行结果是一个名为COMPLETED
的文件,但我实现了以下方法来检查该文件,以指示执行已完成
private static boolean checkFinished(String path)
{
boolean result = false;
String directory = path + "\\expts";
File dir = new File(directory);
if(dir.isDirectory())
while(!result)
{
for(File f: dir.listFiles())
if(!f.isDirectory() && "__COMPLETED__".equals(f.getName()))
{
result = true;
break;
}
if(!result)
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(result);
return result;
}
但是当我在main方法中调用这些方法时,如下所示:
File f = new File("C:\\inputFile.txt");
execute(f);
System.out.println(checkFinished(f.getParent()));
我得到以下输出:
false // printed from the checking
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
.... // rest of cmd output
这里的问题是,
checkFinshed
方法只打印一次,然后在文件已经存在时打印true。代码中有什么错误?37个视图,甚至没有注释!!不管怎样,我将我的checkFinished
方法改为以下方法,它成功了。希望它能让其他人受益
private static boolean checkFinished(String path)
{
boolean result = false;
String directory = path + "\\expts";
File dir = new File(directory);
while(true)
{
try
{
Thread.sleep(3000);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
if(dir.isDirectory())
{
for(File f: dir.listFiles())
if(!f.isDirectory() && "__COMPLETED__".equals(f.getName()))
{
result = true;
logger.info(" SIMULATOR: simulation finished ");
break;
}
if(result)
break;
}
}
return result;
}
private static boolean checkFinished(String path)
{
boolean result = false;
String directory = path + "\\expts";
File dir = new File(directory);
while(true)
{
try
{
Thread.sleep(3000);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
if(dir.isDirectory())
{
for(File f: dir.listFiles())
if(!f.isDirectory() && "__COMPLETED__".equals(f.getName()))
{
result = true;
logger.info(" SIMULATOR: simulation finished ");
break;
}
if(result)
break;
}
}
return result;
}