如何在从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 =

我使用下面的代码从java运行cmd命令(代码采用自)

同步管道等级:

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;
}