import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileContentSearch {
/**
* Searches files for a given hypothesis and optional flags.
*
* @param directoryPath The directory to search in.
* @param hypothesis The hypothesis to search for.
* @param flags Optional flags to include in the search. Can be null or empty.
* @return A list of file paths where the hypothesis was found.
*/
public static List<String> searchFiles(String directoryPath, String hypothesis, String flags) {
List<String> results = new ArrayList<>();
if (directoryPath == null || directoryPath.isEmpty() || hypothesis == null || hypothesis.isEmpty()) {
return results; // Return empty list for invalid input
}
File directory = new File(directoryPath);
if (!directory.exists() || !directory.isDirectory()) {
System.err.println("Invalid directory path: " + directoryPath);
return results;
}
Pattern pattern;
if (flags != null && !flags.isEmpty()) {
pattern = Pattern.compile("(" + flags + ")");
} else {
pattern = Pattern.compile(hypothesis);
}
try {
Files.walkFileLocations(directory.toPath())
.filter(file -> file.isFile()) // Only process files
.forEach(file -> {
try {
String content = new String(Files.readAllBytes(file));
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
results.add(file.toPath().toString());
}
} catch (IOException e) {
System.err.println("Error reading file " + file.toPath() + ": " + e.getMessage());
}
});
} catch (IOException e) {
System.err.println("Error walking directory " + directoryPath + ": " + e.getMessage());
}
return results;
}
public static void main(String[] args) {
// Example Usage
String directory = "test_files"; // Replace with your directory
String hypothesis = "example";
String flags = "flag1,flag2";
List<String> foundFiles = searchFiles(directory, hypothesis, flags);
if (foundFiles.isEmpty()) {
System.out.println("No files found containing '" + hypothesis + "' and flags '" + flags + "'.");
} else {
System.out.println("Files containing '" + hypothesis + "' and flags '" + flags + "':");
for (String file : foundFiles) {
System.out.println(file);
}
}
}
}
Add your comment