正在尝试访问最近下载的文件-Java

正在尝试访问最近下载的文件-Java,java,csv,file,Java,Csv,File,我有一个下载csv文件的java机器人,然后通过获取最近下载的文件的路径名来解析csv文件。出于某种原因,当我调用函数获取最新下载时,它将获取第二次最新下载,但如果我再次调用该函数,它将成功获取最新下载的文件。附件中我有下载CSV文件的函数的图片,以及我在main中调用函数的位置的图片。请帮忙 输出: 结束读取我的文件 最近下载的文件名=C:\Users\MyUsername\Downloads\export\u 2020-12-03 16\u 55\u 21.csv 最近下载的文件名=C:\

我有一个下载csv文件的java机器人,然后通过获取最近下载的文件的路径名来解析csv文件。出于某种原因,当我调用函数获取最新下载时,它将获取第二次最新下载,但如果我再次调用该函数,它将成功获取最新下载的文件。附件中我有下载CSV文件的函数的图片,以及我在main中调用函数的位置的图片。请帮忙

输出:

结束读取我的文件
最近下载的文件名=C:\Users\MyUsername\Downloads\export\u 2020-12-03 16\u 55\u 21.csv
最近下载的文件名=C:\Users\MyUsername\Downloads\export\u 2020-12-03 17\u 00\u 53.csv
SYSO getRecentDownloadCSV=C:\Users\MyUsername\Downloads\export\u 2020-12-03 17\u 00\u 53.csv


正如您在输出中看到的,最近的第一个下载文件名不正确。下面两个是正确的。有谁能告诉我如何防止调用此函数两次,并在第一次调用函数时成功获得最新下载?谢谢。

我认为您在标题中使用了getRecentDownloadCSV()两次。尝试在第二次呼叫时删除第一个

试着在代码中使用它

for(int i = 1; files.length-1; i++){
if(theNewestFile.lastModified() < files[i].lastModified()){
theNewestFile = files[i];
}
for(int i=1;files.length-1;i++){
if(theNewestFile.lastModified()
请编辑您的问题,将代码实际包含为文本。您的代码读取文件列表,等待5秒,然后处理此问题(5秒前)列表。这没有意义。在您想要处理文件列表之前,请先阅读文件列表。如果我不使用睡眠线程,则进程将无法获取最近的下载。使用睡眠线程,它将成功获取最近的下载。@sql\u user11:但显然它没有成功获取最近的下载。我收集到您的问题实际上是一个竞争条件:实际上有东西在5秒内写入了文件。这就是为什么第一个调用(查找文件然后休眠)失败,而第二个调用成功的原因。另外:发布代码。