读取目录中的多个文件并打印特定内容

时间:2016-11-20 22:34:42

标签: java file printing bufferedreader filereader

我想要实现的基本上是一个Java文件,它查看用户计算机上的特定目录,搜索目录中的所有文件以查找特定单词(在本例中为电子邮件),然后最后打印出来。

我现在拥有的当前脚本查找某个目录中的所有文件,打印出这些文件名。除此之外,我还想出了如何让脚本在一个文件中搜索特定单词然后将其打印出来。唯一的问题是虽然它搜索那个文件并获得该单词/短语但必须给它完整的目录和文件才能工作。我只是希望它有一个特定的目录,然后搜索其中的所有文件。我已经尝试使用我创建的目录变量来查找所有文件,但是当使用它作为搜索文件的目录来查找单词时它不起作用。

下面是我的代码中用于我想要的功能的部分。实际的功能是在我的真实剧本中调用的,所以不要担心它的工作原理。我还在脚本中评论了我想要在哪里使用的变量。

    package aProject;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class aScanner {

    static String usernameMac = System.getProperty("user.name");
    final static File foldersMac = new File("/Users/" + usernameMac + "/Library/Mail/V2"); // this is the right directory I want to look through

    public static void listFilesForFolder(final File foldersMac) {
        for (final File fileEntry : foldersMac.listFiles()) {

            if (fileEntry.isDirectory()) {
                listFilesForFolder(fileEntry);

                try {
                    BufferedReader bReaderM = new BufferedReader(new FileReader("/Users/username/Library/Mail/V2/AosIMAP-/INBOX.mbox/longnumber-folder/Data/Messages/1.emlx")); //this is where I would like the foldersMac variable to work in, instead of this full directory
                    String lineMe;
                    while((lineMe = bReaderM.readLine()) != null)
                    {
                        if(lineMe.contains(".com"))
                            System.out.println(lineMe);
                    }
                    bReaderM.close();
                }
                catch (IOException e) {

                }

            } else {
                System.out.println(fileEntry.getName());

            }

        }
    }

    }

2 个答案:

答案 0 :(得分:0)

我认为你的问题在于你的递归逻辑, 你在目录结构中递归下去,你走过你的树,但是没有写出这个if语句的原因:

if (fileEntry.isDirectory()) {
                listFilesForFolder(fileEntry);

...
}

先关闭那个If语句,然后它应该可以工作。

答案 1 :(得分:0)

我认为这是你想要实现的目标:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class aScanner {

    static String usernameMac = System.getProperty("user.name");
    final static File foldersMac = new File("/Users/" + usernameMac + "/Library/Mail/V2");

    public static void main(String[] args) throws IOException {
        listFilesForFolder(foldersMac);
    }

    public static void listFilesForFolder(final File foldersMac) throws IOException {
        for (final File fileEntry : foldersMac.listFiles()) {
            if (fileEntry.isDirectory()) {
                listFilesForFolder(fileEntry);
            } else {
                ArrayList<String> lines = new ArrayList<>();
                try (BufferedReader bReaderM = new BufferedReader(new FileReader(fileEntry))) {
                    String lineMe;
                    while ((lineMe = bReaderM.readLine()) != null) {
                        if (lineMe.contains(".com")) {
                            lines.add(lineMe);
                        }
                    }
                }
                if (!lines.isEmpty()) {
                    System.out.println(fileEntry.getAbsolutePath() + ":");
                    for (String line : lines) {
                        System.out.println("  " + line.trim());
                    }
                }
            }
        }
    }
}