通配符目录搜索问题

问题描述 投票:0回答:2

我遇到了一个问题,试图使用通配符验证目录中是否存在文件。

该方法应该确定是否可以在当前目录中找到名为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)
java file wildcard
2个回答
0
投票

两个问题:1)将find调用中的maxdepth更改为1(从零开始)2)path.getFileName()返回完整路径名。您将只想评估文件名部分(查看getName(getNameCount() - 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的过程中,我非常喜欢解决问题的难题。有很多资源,有许多不同的方法可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.