我有以下代码非常粗糙,但它是我被要求完成的开始。我的问题与生成的列表有关。它目前列出服务器上的所有文件,并标记代码中提到的PMR数据。有什么我可以改变,以便生成的结果只列出匹配的数据而不是标记它?
import java.io.File;
public class FilePmrDetector {
public static void main(String[] args) {
listFiles(new File("/"));
}
public static void listFiles(File file) {
if (file == null || isBlackListed(file)) {
return;
}
doSomeActionOnFile(file);
if (file.isDirectory()) {
File[] fs = file.listFiles();
if (fs != null) {
for (File f : fs) {
listFiles(f);
}
}
}
}
}
return false;
}
public static void doSomeActionOnFile(File file) {
String msg = file.getAbsolutePath();
if (isAPmr(file)) {
msg += " ----------PMR-----------";
}
System.out.println(msg);
}
public static boolean isAPmr(File file) {
if (file != null) {
String name = file.getAbsolutePath();
return name.matches("^.*(\\d{5},[a-zA-z0-9]{3},\\d{3}).*$");
}
return false;
}
}
答案 0 :(得分:1)
这应该是可运行的,它只打印if (isAPmr(file))
import java.io.File;
public class FilePmrDetector {
public static void main(String[] args) {
listFiles(new File("/"));
}
public static void listFiles(File file) {
if (file == null) {
return;
}
doSomeActionOnFile(file);
if (file.isDirectory()) {
File[] fs = file.listFiles();
if (fs != null) {
for (File f : fs) {
listFiles(f);
}
}
}
}
public static void doSomeActionOnFile(File file) {
String fileName = file.getAbsolutePath();
String printOut = "";
if (isAPmr(file)) {
printOut = printOut + fileName;
}
if (printOut != "") {
System.out.println(printOut);
}
}
public static boolean isAPmr(File file) {
if (file != null) {
String name = file.getAbsolutePath();
return name.matches("^.*(\\d{5},[a-zA-z0-9]{3},\\d{3}).*$");
// I tested with: return name.contains(".exe");
}
return false;
}
}
编辑:
这种doSomeActionOnFile(File file)
方法更好,因为它不像其他方法那样过于复杂。
public static void doSomeActionOnFile(File file) {
if (isAPmr(file)) {
System.out.println(file.getAbsolutePath());
}
}