java指定文件夹下查找固定的字符串并将其所在的文件名,行数,该行全部内容写入txt文件中(具体实例)

java在指定的文件夹下(这个文件夹下可以有很多文件,可以存在子路径),查找1个固定的字符串,将查找到的结果用下面的形式保存到另1个txt文件中
查找的文件名,行数,该行全部内容

除非你指定查找的文件都是文本文件,如果是EXCEL等复杂格式的文件,就不一定能达到你的要求了。
下边是只针对文件本文件的方法。
andygulin 的只是不能遍历子文件夹。
--------------------------------------------------------------------
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

public class Test {
public static void main(String[] args) throws Exception {

File root = new File("D:\\test");
String find = null;
List<String> result = new ArrayList<String>();
execute(root, find, result);

FileWriter fw = new FileWriter("D:\\result.txt");
for (String data : result) {
fw.write(data + "\r\n");
}
fw.close();
}

public static void execute(File root, String find, List<String> result)
throws Exception {
if (root.isFile()) {
return;
}
File[] files = root.listFiles();
for (File file : files) {
if (file.isDirectory()) {
execute(file, find, result);
} else if (file.isFile()) {
fileHandler(file, find, result);
}
}
}

public static void fileHandler(File file, String find, List<String> result)
throws Exception {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
try {
int lineIndex = 0;
StringBuffer linenums = new StringBuffer("line:[");
boolean isSave = false;
while (br.ready()) {
String line = br.readLine();
lineIndex++;
if (line.indexOf(find) != -1) {
linenums.append(lineIndex).append(",");
isSave = true;
}
}
if (isSave) {
linenums.delete(linenums.length() - 1, linenums.length());
linenums.append("]");
result.add(file.getPath());
result.add(linenums.toString());
}
} finally {
br.close();
fr.close();
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-04
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;

public class Test {

public static void main(String[] args) throws Exception {
String searchStr = "APPTYPEID";
File searchDir = new File("D:\\xampp\\htdocs\\discuz");
List<Search> list = new ArrayList<Search>();
Collection<File> files = FileUtils.listFiles(searchDir, null, true);
List<String> lines = null;
for (File file : files) {
lines = FileUtils.readLines(file);
for (int i = 0; i < lines.size(); i++) {
if (lines.get(i).indexOf(searchStr) != -1) {
Search s = new Search();
s.setFilename(file.getName());
s.setLine(i + 1);
s.setContent(lines.get(i));
list.add(s);
}
}
}
StringBuffer sb = new StringBuffer();
for (Search s : list) {
sb.append(s.getFilename() + " , " + s.getLine() + " , " + s.getContent()).append(
IOUtils.LINE_SEPARATOR);
}
FileUtils.writeStringToFile(new File("D:\\search.txt"), sb.toString(), "UTF-8");
}
}

class Search {
private String filename;
private int line;
private String content;

public String getFilename() {
return filename;
}

public void setFilename(String filename) {
this.filename = filename;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public void setLine(int line) {
this.line = line;
}

public int getLine() {
return line;
}

}本回答被网友采纳