我正在努力解决非常基本的问题,请看一下:
其他一些进程会创建一个名称未知但扩展名为.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());
}
}
答案 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
如果您想查看更多的感谢* .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;
}
}
答案 2 :(得分:0)
File f = new File("C:\\Test\\strangeName.txt");
获取文件名:
String fileName = f.getName();
然后获得扩展名:
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();
}