package com.search;
import com.l2fprod.common.swing.JDirectoryChooser;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.swing.*;
import javax.swing.JOptionPane;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
public class Java_File_SearchEngine extends JFrame implements ActionListener {
Container container;
JLabel labelSourceDirectory;
JLabel labelDestinationDirectory;
JLabel labelFileExtension;
JLabel labelSearchString;
JLabel labelOptional;
JTextField textFieldSourceDirectory;
JTextField textFieldDestinationDirectory;
JTextField textFieldFileExtension;
JTextField textFieldSearchString;
JButton buttonChooseSourceDirectory;
JButton buttonChooseDestinationDirectory;
JButton buttonSearchFiles;
public Java_File_SearchEngine() {
container = getContentPane();
container.setLayout(null);
labelSourceDirectory = new JLabel("* Source Directory :");
labelDestinationDirectory = new JLabel("* Destination Directory :");
labelFileExtension = new JLabel("* File Extension :");
labelSearchString = new JLabel("Search String :");
labelOptional = new JLabel("( Optional )");
textFieldSourceDirectory = new JTextField();
textFieldDestinationDirectory = new JTextField();
textFieldFileExtension = new JTextField();
textFieldSearchString = new JTextField();
buttonChooseSourceDirectory = new JButton("Choose Source Directory");
buttonChooseDestinationDirectory = new JButton("Choose Destination Directory");
buttonSearchFiles = new JButton("Search Files");
labelSourceDirectory.setBounds(10, 10, 200, 30);
textFieldSourceDirectory.setBounds(150, 10, 200, 30);
buttonChooseSourceDirectory.setBounds(370, 10, 200, 30);
labelDestinationDirectory.setBounds(10, 50, 200, 30);
textFieldDestinationDirectory.setBounds(150, 50, 200, 30);
buttonChooseDestinationDirectory.setBounds(370, 50, 200, 30);
labelFileExtension.setBounds(10, 100, 200, 30);
textFieldFileExtension.setBounds(150, 100, 200, 30);
labelSearchString.setBounds(10, 150, 200, 30);
textFieldSearchString.setBounds(150, 150, 200, 30);
labelOptional.setBounds(370, 150, 200, 30);
buttonSearchFiles.setBounds(150, 200, 200, 30);
container.add(labelSourceDirectory);
container.add(textFieldSourceDirectory);
container.add(buttonChooseSourceDirectory);
container.add(labelDestinationDirectory);
container.add(textFieldDestinationDirectory);
container.add(buttonChooseDestinationDirectory);
container.add(labelFileExtension);
container.add(textFieldFileExtension);
container.add(labelSearchString);
container.add(textFieldSearchString);
container.add(labelOptional);
container.add(buttonSearchFiles);
buttonChooseSourceDirectory.addActionListener(this);
buttonChooseDestinationDirectory.addActionListener(this);
buttonSearchFiles.addActionListener(this);
setTitle("Nandeeswar Search Engine");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) throws IOException {
Java_File_SearchEngine frame = new Java_File_SearchEngine();
frame.setSize(600, 300);
frame.setVisible(true);
}//end of main()
public static boolean searchStringInFile(File inputFile, String inputString) {
try {
String stringSearch = inputString;
BufferedReader bf = new BufferedReader(new FileReader(inputFile.getPath()));
int linecount = 0;
String line;
System.out.println("Searching for String \" " + stringSearch + " \" in file...");
while ((line = bf.readLine()) != null) {
linecount++;
int indexfound = line.indexOf(stringSearch);
if (indexfound > -1) {
System.out.println("Word was found at position " + indexfound + " on line " + linecount);
return true;
}
}
bf.close();
} catch (IOException e) {
System.out.println("IO Error Occurred: " + e.toString());
return false;
}
return false;
}
public static String getDirectory() {
String directoryPath = "";
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
JDirectoryChooser chooser = new JDirectoryChooser();
int choice = chooser.showOpenDialog(frame);
if (choice == JDirectoryChooser.CANCEL_OPTION) {
System.out.println("User Canceled");
} else {
directoryPath = chooser.getSelectedFile().getAbsolutePath();
System.out.println("Dialog Selection: " + directoryPath);
}
return directoryPath;
}
@Override
public void actionPerformed(ActionEvent event) {
Object button = event.getSource();
if (button == buttonChooseSourceDirectory) {
textFieldSourceDirectory.setText(Java_File_SearchEngine.getDirectory());
} else if (button == buttonChooseDestinationDirectory) {
textFieldDestinationDirectory.setText(Java_File_SearchEngine.getDirectory());
} else if (button == buttonSearchFiles) {
try {
Thread.sleep(2000);
} catch (Exception e) {
}
//Search File's
try {
File sourceDirectory = new File(textFieldSourceDirectory.getText().replace("\\", "/"));
String destinationDirectory = textFieldDestinationDirectory.getText().replace("\\", "/") + "/";
String fileExtension = textFieldFileExtension.getText();// kind of files to copy into destination directory
String searchString = textFieldSearchString.getText();
boolean fileFound = false;
System.out.println("Source: " + textFieldSourceDirectory.getText().replace("\\", "/"));
System.out.println("destinationDirectory: " + destinationDirectory);
System.out.println("fileExtension: " + fileExtension);
System.out.println("searchString: " + searchString);
System.out.println("Getting all files in " + sourceDirectory.getCanonicalPath() + " including those in subdirectories");
System.out.println("Loading...");
List<File> files = (List<File>) FileUtils.listFiles(sourceDirectory, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
int fileNo = 1;
int foundFilesNo = 0;
for (File file : files) {
//Getting FilePath,FileName,FileExtension
String filePath = "", fileName = "", ext = "";
filePath = file.getPath();
int lastSlash = filePath.lastIndexOf("\\");
int lastDot = filePath.lastIndexOf(".");
fileName = filePath.substring(lastSlash + 1, filePath.length());
ext = filePath.substring(lastDot + 1, filePath.length());
// Copying search string contained text files into speified destination directory...
if (ext.equalsIgnoreCase(fileExtension)) {
System.out.println((fileNo++) + ".File name :" + fileName + " (Path: " + filePath + ")");
System.out.println("Extension :" + ext);
if (textFieldSearchString.getText().equalsIgnoreCase("")) {
fileFound = true;
File copyFile = new File(destinationDirectory + fileName);
copyFile.createNewFile();
InputStream in = new FileInputStream(file);
OutputStream out = new FileOutputStream(copyFile, true); // appending output stream
foundFilesNo++;
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
} else {
boolean searchResult = Java_File_SearchEngine.searchStringInFile(file, searchString);
Thread.sleep(2000);
System.out.println("searchResult: " + searchResult);
if (searchResult) {
fileFound = true;
foundFilesNo++;
File copyFile = new File(destinationDirectory + fileName);
copyFile.createNewFile();
InputStream in = new FileInputStream(file);
OutputStream out = new FileOutputStream(copyFile, true); // appending output stream
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
}
}
}
}
if (fileFound) {
if (foundFilesNo == 1) {
//JOptionPane.showMessageDialog(null, "Found : " + foundFilesNo + " file");
} else if (foundFilesNo > 1) {
// JOptionPane.showMessageDialog(null, "Found : " + foundFilesNo / 2 + " files");
}
Desktop.getDesktop().open(new File(destinationDirectory));
} else {
JOptionPane.showMessageDialog(null, "No Such File's Found with search String: " + searchString);
}
} catch (Exception e) {
}
}
}
}
//end of code...