我想在目录中的所有文件中搜索特定字符串。
例如:在路径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章中搜索....
请建议我如何修改此代码..
答案 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;
}