ЛР3. Задание 4
This commit is contained in:
parent
e6517134e3
commit
71fe5cffcc
@ -1,6 +1,7 @@
|
|||||||
package tse;
|
package tse;
|
||||||
|
|
||||||
import tse.lr3.DirCopy;
|
import tse.lr3.DirCopy;
|
||||||
|
import tse.lr3.DirFindText;
|
||||||
import tse.lr3.LR_3_Tasks;
|
import tse.lr3.LR_3_Tasks;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -29,6 +30,7 @@ public class LR_3 implements ILabRab {
|
|||||||
DirCopy.main();
|
DirCopy.main();
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
DirFindText.main();
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
break;
|
break;
|
||||||
|
127
src/tse/lr3/DirFindText.java
Normal file
127
src/tse/lr3/DirFindText.java
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
package tse.lr3;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStreamWriter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author aNNiMON
|
||||||
|
*/
|
||||||
|
public class DirFindText extends AbstractDirectoryChooser {
|
||||||
|
|
||||||
|
private static final String SEARCH_TEXT = "class";
|
||||||
|
|
||||||
|
public static void main() {
|
||||||
|
new DirFindText().setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final List<FindInfo> findInfos;
|
||||||
|
private File logFile;
|
||||||
|
private BufferedWriter writer;
|
||||||
|
|
||||||
|
public DirFindText() {
|
||||||
|
super("Поиск текста в директориях");
|
||||||
|
findInfos = new ArrayList<>();
|
||||||
|
createFilesAndDirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createFilesAndDirs() {
|
||||||
|
logFile = new File("E:\\LR_3\\task4_log.txt");
|
||||||
|
try {
|
||||||
|
writer = new BufferedWriter(
|
||||||
|
new OutputStreamWriter(new FileOutputStream(logFile, true), "UTF-8")
|
||||||
|
);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void directorySelected(File directory) {
|
||||||
|
scanFiles(directory);
|
||||||
|
writeFindInfo(findInfos);
|
||||||
|
if (writer != null) {
|
||||||
|
try {
|
||||||
|
writer.flush();
|
||||||
|
writer.close();
|
||||||
|
} catch (IOException ex) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void scanFiles(File dir) {
|
||||||
|
File[] files = dir.listFiles();
|
||||||
|
for (File file : files) {
|
||||||
|
if (file.isDirectory()) {
|
||||||
|
scanFiles(file);
|
||||||
|
} else {
|
||||||
|
// Ищем строку в файле
|
||||||
|
try {
|
||||||
|
findString(file, SEARCH_TEXT);
|
||||||
|
} catch (IOException ex) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void findString(File file, String searchText) throws IOException {
|
||||||
|
BufferedReader reader = new BufferedReader(
|
||||||
|
new InputStreamReader( new FileInputStream(file), "UTF-8" )
|
||||||
|
);
|
||||||
|
int lineNumber = 0;
|
||||||
|
String line;
|
||||||
|
while ( (line = reader.readLine()) != null ) {
|
||||||
|
int pos = -1;
|
||||||
|
while( (pos = line.indexOf(searchText, pos + 1)) != -1) {
|
||||||
|
findInfos.add(new FindInfo(file.getAbsolutePath(), lineNumber, pos));
|
||||||
|
}
|
||||||
|
lineNumber++;
|
||||||
|
}
|
||||||
|
reader.close();
|
||||||
|
reader = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void writeFindInfo(List<FindInfo> infos) {
|
||||||
|
writeLog("------------------");
|
||||||
|
writeLog("Искали: " + SEARCH_TEXT);
|
||||||
|
Collections.sort(infos, filenameComparator);
|
||||||
|
for (FindInfo info : infos) {
|
||||||
|
writeLog(String.format("[%d:%d]\tfile://%s", info.linenumber + 1, info.position + 1, info.filename));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void writeLog(String filename) {
|
||||||
|
System.out.println(filename);
|
||||||
|
try {
|
||||||
|
writer.write(filename);
|
||||||
|
writer.newLine();
|
||||||
|
} catch (IOException ex) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
private class FindInfo {
|
||||||
|
String filename;
|
||||||
|
int linenumber, position;
|
||||||
|
|
||||||
|
public FindInfo(String filename, int linenumber, int position) {
|
||||||
|
this.filename = filename;
|
||||||
|
this.linenumber = linenumber;
|
||||||
|
this.position = position;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Comparator<FindInfo> filenameComparator = new Comparator<FindInfo>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compare(FindInfo o1, FindInfo o2) {
|
||||||
|
return o1.filename.compareToIgnoreCase(o2.filename);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user