在目录中的所有文件中搜索字符串

时间:2016-06-29 15:12:52

标签: java linux

我想在目录中的所有文件中搜索特定字符串。

例如:在路径D中搜索“tiger”:/ test / chapters /

D:/test/chapters
           /chapter1.log
           /chapter2.log
           /chapter3.log  all these sub files under D:/test/chapters/ .

我尝试过的示例代码:

public class Example  {
    public Example() {
        super();
    }

    public int plugin_execute() {
        boolean  foundstring=false;
        try {
            File dir = new File("D:/test/chapters");
            String[] children = dir.list();
            if (children == null) {
                System.out.println("does not exist is not a directory");
            } else {
                for (int i = 0; i < children.length; i++) {
                    String filename = children[i];
                    System.out.println(filename);

                    if (filename !=null) {
                        foundstring = testString(filename, "tiger");
                        System.out.println("failed");
                    }      

                    //Search for entry in file

                    if (!foundstring) {
                        return //failuremsg
                    } else {
                        System.out.println("failed");
                        return //succes
                    }
                }
            }
            return 1;
        } catch (Exception e) {
            return //error mssg
        }
    }

    private boolean teststring(String filePath, String str) {
        BufferedReader br = null;  
        File file = new File(filePath);
        boolean result = false;
        if(!file.exists())
            return false;
        try {
            br = new BufferedReader(new FileReader(filePath));
            String sCurrentLine;
            while ((sCurrentLine = br.readLine()) != null) {
                if (sCurrentLine.contains(str))  {
                    result = true;
                    System.out.println(str);
                    System.out.println("Found entry ");
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)br.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }
}

它只返回上一个文件的输出,意味着如果它在上一个文件中搜索成功则返回成功,否则失败。 但是如果在第一个文件中找到字符串,我想要成功。即第1章应该返回成功,如果在第1章中没有找到,它应继续在第2章中搜索....

请建议我如何修改此代码..

2 个答案:

答案 0 :(得分:0)

问题:简单混淆!true / false位置。

解决方案:更改此

if (! foundString) 
{
    return // failuremsg
} 
else 
{
    System.out.println("failed");
     return // success
}

if (foundString) 
{
    // return success message

} 
else 
{
    // return failure message
}

我相信我在代码中看到的另一个问题是,行foundstring = findString(filename, "tiger");调用方法findString,而您在代码中发布的另一种方法是testString。我认为这是一个名字混淆。

答案 1 :(得分:0)

public void listFiles(Path dir , String text)
{
    try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(dir))
    {
        for (Path path : directoryStream)
        {
            if (Files.isRegularFile(path) && Files.isReadable(path))
            {
                //this.findString(path, text);
            }
        }
    }
    catch (IOException ex)
    {
        ex.printStackTrace();
    }
}

private boolean findString(Path file, String text)
{
    //Your implementation
    return true;
}