使用循环检查是否存在文件

3

我希望通过while循环来检查文件是否存在。现在问题是,如果我使用类似以下代码:

while (file.exists()) {
        text.setText("Some text appears");
        text.setTextColor(Color.RED);
}

我的程序似乎总是完全没有响应。是因为我的循环有问题吗?或者为什么它不能正常工作呢?
目前,我正在使用一个简单的if语句,但我不喜欢这种方式,因为当文件存在时,它不会立即更新。
编辑: 我的要求是: 我提供一个可下载的文件。在我的应用中,有一个文本显示“尚未可用”。我想在文件存在后立即更改文本,例如“文件已准备好”。

3
是的,这是一个无限循环。它不断地检查一个始终为真的条件,所以它永远不会退出循环。你想要做什么? - luanjot
你需要在循环中更改文件对象。在你的情况下,你一直请求相同的文件!! - Jens
1
如果您能描述清楚您想要做什么,并发布您正在使用的代码,那将会很有帮助。 - zero_dev
你正在检查文件是否存在,为什么不检查文件不存在呢? - j.con
4个回答

3
如果您想定期检查文件是否存在,您需要使用异步任务或定时器。
    TTimerTask task = new TimerTask() {

        @Override
        public void run() {
            // Here you do whatever you want
        }
    };

    Timer timer = new Timer();
    timer.schedule(task, 0,30000);

这将每30秒检查一次文件。
你可以在http://www.mkyong.com/java/jdk-timer-scheduler-example/上找到更多信息。

1
目前很难确定这是否是原帖作者的意图。不过,我也会考虑使用WatchService。 - Edwin Dalorzo
OP说他想要检查文件何时可用并更改文本...所以,我猜这就是他需要的。当然,还有其他可能的解决方案。 - luanjot
1
但这就是他说他想要改变的,“暂时不可用”变成“可用”。我认为时间非常重要。 - luanjot
1
我还没有阅读问题的编辑文本。你是对的。 - Edwin Dalorzo
1
@EdwinDalorzo 您指向[WatchService][http://docs.oracle.com/javase/tutorial/essential/io/notification.html]的指针比所有答案加在一起都更有价值。 事件/通知是前进的方式,而不是轮询。 - user3603546

2

如果文件存在,你的程序将进入无限循环,因为while循环内部的条件将始终为true

你需要这样检查:

File file = new File(subDir.getPath() + "somefile.txt");  
boolean exists = file.exists();  

if (!exists) {  
// It returns false if File or directory does not exist 
}
else
{
  //Update here
}

如果您想在循环中检查它,请尝试以下方法:

while (true)
{
  File file = new File(subDir.getPath() + "somefile.txt");  
  boolean exists = file.exists();  

  if (!exists) {  
    // It returns false if File or directory does not exist 
    return;
  }
  else
  {
    //Update here
  }
}

1
如果文件存在,则它将进入while循环并保持循环,因为文件存在,您必须在while循环中使文件无法存在...
最好的做法是让您的程序在没有while循环的情况下正常运行...正如您提到的使用IF函数一样,然后随着时间的推移实施(测试)一个新函数(while循环)。
您需要在while循环中修复的问题是...文件进入循环时会发生什么以及它如何退出循环。当前状态是,文件仍然存在,因此需要解决这个问题。

0

好的,那么每当另一个人检查文件时,如果文件不存在,程序会退出吗?我的意思是,你不能让它无限期地检查文件。我想你可以将其放入一个线程中,并在while循环中使用轻微的等待来运行它,但开销太大...天哪!

这是您程序内的特定屏幕吗?该人员是否应该能够退出此“找到/未找到文件”的页面?我可能可以编写一些代码片段,但我需要更多信息。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接