我遇到了一个问题,试图使用通配符验证目录中是否存在文件。
该方法应该确定是否可以在当前目录中找到名为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)
两个问题:1)将find调用中的maxdepth更改为1(从零开始)2)path.getFileName()返回完整路径名。您将只想评估文件名部分(查看getName(getNameCount() - 1)
建议之后,我终于找到了一个决议:
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的过程中,我非常喜欢解决问题的难题。有很多资源,有许多不同的方法可以解决问题。