Java 路径匹配器:检查文件或目录是否存在通配符和模式
Java Path-matcher: Check the files or directories are present with wild-chars and patterns
我有一个 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 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());
}
}
}
}
我有一个 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 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());
}
}
}
}