如何等待只有固定“* .txt”扩展名的文件?

时间:2016-01-29 11:01:05

标签: java regex file

我正在努力解决非常基本的问题,请看一下:

其他一些进程会创建一个名称未知但扩展名为.txt的文件(只有一个)。这个创建可能需要一段时间,所以我编写了一个等待这个文件的循环,并在找到文件时中断。 问题是 - 如何将未知值传递给String? 我想用正则表达式可以做到这一点。

我对此尝试的更多: Java: Find .txt files in specified folder但在我的观点中,有更好的方法可以为我的案例应用不同的解决方案。

代码:

import java.io.File;

public class Test {

public static void waitForFile() throws InterruptedException{
    while(true){
        File f = new File("C:\\Test\\strangeName.txt");
        if(f.exists()){
            System.out.println("File is available now! End of the program");
            break;
        }
        System.out.println("File still does not exist.");
        Thread.sleep(5000);
    }
}   
public static void main(String[]args) throws InterruptedException{
    waitForFile();  
}
}

我想要一个像这样运行的代码:

File f = new File("C:\\Test\\*.txt");    

提前感谢任何提示!

解决这个问题

感谢@JordiCastilla,我在下面创建了一个代码。再次感谢:)

import java.io.File;
import java.io.FileFilter;

class TextFileFilter implements FileFilter{

private String fileExtension = "txt";

@Override
public boolean accept(File file) {
    if(file.getName().toLowerCase().endsWith(fileExtension)){
        return true;
    }
    return false;
}
}

public class Test {

public static String waitForFileAndGetName() throws InterruptedException{

    TextFileFilter tff = new TextFileFilter();
    File f = new File("C:\\Users\\502532974\\Desktop\\Tescior");
    int i = 1;
    while(true){

        File[] files = f.listFiles(tff);
        if(files.length > 0){
            System.out.println("File is available now! End of the program.");
            return f.listFiles(tff)[0].getName();
        }
        System.out.println("File still does not exist. Iteration number "+i);
        Thread.sleep(5000);
        i++;
    }
}


public static void main(String[]args) throws InterruptedException{
    System.out.println("File name is="+waitForFileAndGetName());    
}
}

5 个答案:

答案 0 :(得分:2)

我建议您使用java.nio.file中的WatchService:https://docs.oracle.com/javase/tutorial/essential/io/notification.html

您可以过滤txt扩展名的结果。

答案 1 :(得分:2)

创建自己的Credentials loginCredentials = new Credentials(); loginCredentials.email = "test@gmail.com"; loginCredentials.password = "password";

如果您只需要@POST("api/login") Call<ApiResponse> loginUser(@Body Credentials credentials); 个文件:

FileFilter

现在您只需要检查文件夹中的更改:

*.txt

ADD ON:

如果您想查看更多的感谢* .txt文件扩展名。会是这样的:

public class TextFileFilter implements FileFilter
{
  private final String TXT = "txt";

  public boolean accept(File file)
  {
    if (file.getName().toLowerCase().endsWith(TXT))
      return true;
    else
      return false;
  }
}

SOURCE

答案 2 :(得分:0)

File f = new File("C:\\Test\\strangeName.txt");
  1. 获取文件名:

    String fileName = f.getName();
    
  2. 然后获得扩展名:

    String exte = fileName.substring(fileName.lastIndexOf(".") + 1);
    

答案 3 :(得分:0)

另一种解决方案:

public static void waitForFile(String fileLocation, String extension) throws InterruptedException {

    List<File> files = Arrays.asList(new File(fileLocation).listFiles());

    int i = 0;
    try {
        while (!files.get(i).getCanonicalPath().endsWith(extension)) {

            i = i == files.size() ? 0 : i + 1;

            Thread.sleep(5000);

        }

        System.out.println(files.get(i).getName());

    } catch (Exception e) {

        Thread.sleep(5000);
        waitForFile(fileLocation, extension);

    }

}

调用此方法,将文件位置和所需扩展名作为参数。

 new bbb().waitForFile("C:\\Test\\", ".txt");

答案 4 :(得分:0)

最简单的解决方案:

public static String waitForFileAndGetName() throws InterruptedException{
    FilenameFilter tff = new WildcardFileFilter("*.txt");
    File f = new File("C:\\Users\\502532974\\Desktop\\Tescior");
    File[] files;
    int i = 0;
    while((files = f.listFiles(tff)).length == 0){
        System.out.println("File still does not exist. Iteration number " + ++i);
        Thread.sleep(500);
    }
    System.out.println("File is available now! End of the program.");
    return f.listFiles(tff)[0].getName();
}