我在尝试使用通配符验证目录中文件的存在时遇到问题。
该方法应确定在当前目录中是否可以找到名称为FAACIFP_(year)(cycle).DAT
的文件。
我尝试使用IF / ELSE运行PathMaker.matches("glob:FAACIFP_18")
,并且在测试它时,它总是评估为TRUE。因此,我尝试了一个lambda函数,但找不到该文件。
下面的lambda是否应该打印文件名,否则我会误解/滥用它吗?
static void getCnvrtdCifpName() throws IOException{
String cnvFileName = "FAACIFP_"+Year.now()
.format(DateTimeFormatter.ofPattern("yy"));
Path cnvFilePath = Paths.get(System.getProperty("user.dir"));
Files.find(cnvFilePath,0,(path,attr) ->
path.getFileName().startsWith(cnvFileName)).forEach(System.out::println);
System.out.println("EVALUATING METHOD....\t SEARCH PATH: "+cnvFilePath
+" \n\t\t\t FILE STRING: "+cnvFileName);
}
输出:
run:
Located RAW CIFP file FAACIFP18
EVALUATING METHOD.... SEARCH PATH: C:\Users\u314170\Documents\Personal\Java\NetBeans\A424Parser
FILE STRING: FAACIFP_18
BUILD SUCCESSFUL (total time: 0 seconds)
答案 0 :(得分:0)
两个问题: 1)将查找呼叫中的最大深度更改为1(从零开始) 2)path.getFileName()返回完整的路径名。您将只需要评估文件名部分(请查看getName(getNameCount()-1)
答案 1 :(得分:0)
在提出建议之后,我终于找到了解决方法:
static void getCnvrtdCifpName() throws IOException{
String cnvFileName = "FAACIFP_"+Year.now()
.format(DateTimeFormatter.ofPattern("yy"));
Path cnvFilePath = Paths.get(System.getProperty("user.dir"));
DirectoryStream<Path> cnvFileStream = Files.newDirectoryStream(cnvFilePath,cnvFileName+"*");
System.out.println("EVALUATING METHOD....\t SEARCH PATH: "+cnvFilePath
+" \n\t\t\t FILE STRING: "+cnvFileName);
List cnvDirList = new ArrayList();
for(Path file: cnvFileStream){
cnvDirList.add(file.getFileName().toString());
}
cnvFileStream.close();
System.out.println(cnvDirList);
}
输出:
run:
EVALUATING METHOD.... SEARCH PATH: C:\Users\u314170\Documents\Personal\Java\NetBeans\A424Parser
FILE STRING: FAACIFP_18
[FAACIFP_1808.dat, FAACIFP_1810.txt, FAACIFP_1811.txt]
BUILD SUCCESSFUL (total time: 0 seconds)
在学习Java的过程中,我真的很喜欢解决问题的挑战。那里的资源太多了,解决问题的方法也很多。