【发布时间】:2020-10-10 11:00:05
【问题描述】:
您好,我想复制没有单曲文件或文件夹的文件。
当我运行该方法时,我得到一个堆栈
public static void copyFiles() {
String path = "C:\\luna\\trunk\\";
List<File> files = (List<File>) FileUtils.listFiles(new File(path), new SuffixFileFilter("-4.7-SNAPSHOT.jar"), TrueFileFilter.INSTANCE);
Pattern pattern = Pattern.compile("^(C:\\luna\\trunk\\lunaRelease\\target\\lib\\)");
for (File file : files) {
Matcher matcher = pattern.matcher(file.getName());
if (file.getName().matches("warsztaty-4.7-SNAPSHOT.jar") || file.getName().matches("lunaRelease-4.7-SNAPSHOT.jar") || matcher.find() ) {
System.out.println("Don't copy this file");
} else {
System.out.println(file.getAbsolutePath());
String source = file.getAbsolutePath();
File sourcedir = new File(source);
File dest = new File("C:\\library");
try {
FileUtils.copyFileToDirectory(sourcedir, dest);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
这是我运行方法时的堆栈。
"C:\Program Files\Java\jdk1.8.0_251\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 5
^(C:\luna\trunk\lunaRelease\target\lib\)
^
at java.util.regex.Pattern.error(Pattern.java:1969)
at java.util.regex.Pattern.escape(Pattern.java:2485)
at java.util.regex.Pattern.atom(Pattern.java:2212)
at java.util.regex.Pattern.sequence(Pattern.java:2144)
at java.util.regex.Pattern.expr(Pattern.java:2010)
at java.util.regex.Pattern.group0(Pattern.java:2919)
at java.util.regex.Pattern.sequence(Pattern.java:2065)
at java.util.regex.Pattern.expr(Pattern.java:2010)
at java.util.regex.Pattern.compile(Pattern.java:1702)
at java.util.regex.Pattern.<init>(Pattern.java:1352)
at java.util.regex.Pattern.compile(Pattern.java:1028)
at CopyFiles.copyFiles(CopyFiles.java:23)
at CopyFiles.main(CopyFiles.java:17)
Process finished with exit code 1
我该如何解决?
【问题讨论】:
-
尝试将 \\ 替换为 \\\\。
-
嗯,错误信息没有错,正则表达式语法中没有
\l特殊序列,例如\d或\w\s所以\不应该可能是这样的序列的开始,所以它应该被转义。表示\的正则表达式可能看起来像\\,它可以用字符串文字写成"\\\\"。但是你为什么首先使用正则表达式?为什么是matches("warsztaty-4.7-SNAPSHOT.jar")而不是equals("warsztaty-4.7-SNAPSHOT.jar")(同样关于`lunaRelease-4.7-SNAPSHOT.jar)。 -
另外,如果您使用正则表达式的唯一目标是使用其行/数据开头
^锚点,那么您可以使用strData.startsWith(sequence)实现类似的效果 -
我解决了这样的问题:file.getAbsolutePath().startsWith("C:\\luna\\trunk\\lunaRelease\\target\\lib\\")