如何让我的代码只打印我搜索的结果

时间:2015-11-20 22:36:38

标签: java

我有以下代码非常粗糙,但它是我被要求完成的开始。我的问题与生成的列表有关。它目前列出服务器上的所有文件,并标记代码中提到的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;
}
}  

1 个答案:

答案 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());
    }
  }