Java Path-matcher:检查文件或目录是否存在wild-chars和模式

问题描述 投票:-1回答:1

我有一个以下的CSV字符串,我想检查给定的文件或目录是否存在。

private static String dir = "/Users/swapnil.kotwal/Swapnil/myproject/build/WEB-INF/classes/test/";

private static String csvConnClasses = dir + "FirstTest*.class,"+ dir+"SecondTest.class,"+dir+"abcd/";

我尝试下面的代码,但我通过ant运行它获得异常java.lang.NoClassDefFoundError: org/aspectj/lang/Signature

       File dir = new File(cls.substring(0, cls.lastIndexOf("/")));
        String[] splits = dir.getAbsolutePath().split(dir.getPath());
        String basePath = splits[0] + "build/WEB-INF/classes/" + dir.getPath();
        dir = new File(basePath);
        if (dir.exists() && dir.isDirectory() && dir.list().length > 0) {
            final String className = getClassName(new File(cls));
            File[] files = dir.listFiles(new FileFilter() {

                public boolean accept(File file) {
                    System.out.println("File Name >>> " + file.getName());
                    return (file.getName().startsWith(className) && file.getName().endsWith(".class"));
                }
            });
            if (files.length == 0) {
                throw new BuildException(cls + " class not found - ");
            }

            if (classSet.contains(cls)) {
                dups.add(cls);
            }
            classSet.add(cls);
        } else
            throw new BuildException(cls + " directory not found - ");
    }

有人可以建议我使用PathMatcher / Regex来检查给定的文件和文件夹是否存在。

java regex file ant filepath
1个回答
1
投票

我正在计划使用Java NIO程序来搜索带有GLOB模式的文件条目。

package com.test.inspector;

import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.StringTokenizer;

public class SearchFile {
    private static String dir = "/Users/swapnil.kotwal/Swapnil/myproject/build/WEB-INF/classes/test/";

    private static String csvConnClasses = dir + "FirstTest*.class,"+ dir+"SecondTest.class,"+dir+"abcd/";

    public static class SearchFileVisitor extends SimpleFileVisitor<Path> {

        private final PathMatcher pathMatcher;
        private int matchCount = 0;

        SearchFileVisitor(String globPattern) {
            pathMatcher = FileSystems.getDefault().getPathMatcher(
                    "glob:" + globPattern);
        }

        @Override
        public FileVisitResult visitFile(Path filePath,
                BasicFileAttributes basicFileAttrib) {
            if (pathMatcher.matches(filePath.getFileName())) {
                matchCount++;
                System.out.println(filePath);
            }
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult preVisitDirectory(Path directoryPath,
                BasicFileAttributes basicFileAttrib) {
            if (pathMatcher.matches(directoryPath.getFileName())) {
                matchCount++;
                System.out.println(directoryPath);
            }
            return FileVisitResult.CONTINUE;
        }

        public int getMatchCount() {
            return matchCount;
        }
    }

    public static void main(String[] args) throws IOException {
        if (null != csvConnClasses) {
            StringTokenizer st = new StringTokenizer(csvConnClasses, ",");
            while (st.hasMoreTokens()) {
                String cls = st.nextToken();
                // Removes all whitespaces and non-visible characters like tab,
                // \n etc.
                cls = cls.replaceAll("\\s+", "");
                Path rootPath = FileSystems.getDefault().getPath( cls.substring(0, cls.lastIndexOf("/")) );
        String globPattern = (new File(cls)).getName();

        SearchFileVisitor searchFileVisitor = new SearchFileVisitor(globPattern);
        Files.walkFileTree(rootPath, searchFileVisitor);
        System.out.println("Match Count: " + searchFileVisitor.getMatchCount());
       }
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.