繁体   English   中英

如何读取给定目录中的所有txt文件以查找字符串? Java的

[英]How to read all txt files in a given directory to look for a string? Java

我希望能够扫描指定目录中的所有文本文件以查找字符串。 我知道如何通读一个文本文件。 那很容易,但是如何使它扫描给定目录中的一堆文本文件中的所有内容?

文件将全部命名为0.txt 1.txt 2.txt等,如果有帮助,也许使用计数器来增加搜索文件的名称,然后在没有更多txt文件时将其停止? 那是我最初的想法,但我似乎无法实现

谢谢

您可以使用以下方法:

String dirName = "E:/Path_to_file";
File dir = new File(dirName);
File[] allFiles = dir.listFiles();
for(File file : allFiles)
{
     // do something
}

此代码段将完成您要查找的内容(可能使用您选择的其他字符集):

File[] files = dir.listFiles();
for (File file : files) {
    String t_text = new String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8);
    if (t_text.contains(search_string)) {
        // do whatever you want
    }
}

您可以使用此示例代码列出目录下的所有文件

public File[] listf(String directoryName) {

// .............list file
File directory = new File(directoryName);

// get all the files from a directory
File[] fList = directory.listFiles();
}

然后,在检索每个文件之后,使用进行遍历

LineIterator li = FileUtils.lineIterator(file);
boolean searchTermFound = false;
while(li.hasNext()  &&  !searchTermFound)  {
   String sLine = li.next();

   //Find the search term...

}

http://commons.apache.org/proper/commons-io/javadocs/api-2.4/org/apache/commons/io/FileUtils.html#lineIterator(java.io.File)

方法调用: scanFiles(new File("").getAbsolutePath(), "bla");

private static void scanFiles(String folderPath, String searchString) throws FileNotFoundException, IOException {
    File folder = new File(folderPath);

    //just do something if its a directory (otherwise possible nullpointerex @ Files#listFiles())
    if (folder.isDirectory()) {
        for (File file : folder.listFiles()) {
            // just scan for content if its not a directory (otherwise nullpointerex @ new FileReader(File))
            if (!file.isDirectory()) {
                BufferedReader br = new BufferedReader(new FileReader(file));
                String content = "";
                try {
                    StringBuilder sb = new StringBuilder();
                    String line = br.readLine();

                    while (line != null) {
                        sb.append(line);
                        sb.append(System.lineSeparator());
                        line = br.readLine();
                    }
                    content = sb.toString();
                } finally {
                    br.close();
                }
                if (content.contains(searchString)) {
                    System.out.println("File " + file.getName() + " contains searchString " + searchString + "!");
                }
            }
        }
    } else {
        System.out.println("Not a Directory!");
    }
}

附加信息:

您可以将FilenameFilter传递到此方法folder.listFiles(new FilenameFilter(){...})

尝试这个:

public class FindAllFileFromDirectory {
    static List<String> fileNames = new ArrayList<String>();

    public static void main(String[] args) {
        File AppDistributionDir = new File("<your directory path>");
        if (AppDistributionDir.isDirectory()) {
            listFilesForFolder(AppDistributionDir);
        }
        for (String s : fileNames) {
            String fileExtension = FilenameUtils.getExtension(s); // import org.apache.commons.io.FilenameUtils;
            //TODO: your condition hrere
            if (s.equals("txt")) {
                System.out.println(s);
            }
        }

    }

    public static void listFilesForFolder(final File folder) {
        for (final File fileEntry : folder.listFiles()) {
            if (fileEntry.isDirectory()) {
                listFilesForFolder(fileEntry);
            } else {
                //System.out.println(fileEntry.getAbsolutePath());
                fileNames.add(fileEntry.getName());

            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM