在继续之前,如何让我的方法等待文件存在

时间:2015-04-06 14:10:23

标签: java

有一个外部程序可以创建XML文件,但创建可能需要一段时间。我需要我的Java程序等到文件存在之后再继续。

我一直在阅读有关同步块的内容,我读到我可以这样做:

synchronized(this) {
    while (!file.exists) { this.wait(); }
}

说实话,我对同步任务并不是很了解,所以我想知道我是否走在正确的轨道上,或者我是否已离开。

3 个答案:

答案 0 :(得分:4)

解决此问题的一种典型方法是让您的XML编写器创建XML文件,当它完成后,它应该创建第二个文件,说明工作已完成。

您的java程序应该监听.done文件而不是XML文件。

如果您对XML编写应用程序没有任何控制权,则无法工作。

答案 1 :(得分:0)

所以我用的是一个while循环来检查文件是否不存在。如果它没有,我让线程休眠一秒钟。它似乎工作正常。谢谢你的帮助。

答案 2 :(得分:-3)

在我看来,你应该有东西通知线程。以下是我的例子。

public class Test {
File file;
public Test(File file){
    this.file = file;
}

public void findFile(){
    synchronized(this){
        while(!file.exists()){
            try {
                System.out.println("before wait:");
                this.wait();
                System.out.println("after wait:");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public void createFile(){
    synchronized(this){
        try {
            System.out.println("before create a new file:");
            file.createNewFile();
            System.out.println("after create a new file:");
            this.notify();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public static void main(String[] args){ 
    Test t = new Test(new File("/Users/yehuizhang/Desktop/uttp.txt"));
    Thread t1 = new Thread(new FindFile(t));
    Thread t2 = new Thread(new CreateFile(t));
    t1.start();
    t2.start();
}
}

class FindFile implements Runnable{
Test t;
public FindFile(Test t){
    this.t = t;
}

@Override
public void run(){
    t.findFile();
}
}

class CreateFile implements Runnable{
Test t;

public CreateFile(Test t){
    this.t = t;
}

@Override
public void run(){
    t.createFile();
}
}