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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();


参考技术A 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;


Linux 查找当前目录下所有包含指定内容的文件

1.查找当前目录【./】中含用内容为zhang的所有文件 [cqs@centos7 data]$ grep -rl zhang ./ ./a.txt ./b.txt 2.查找当前目录中含用内容为zhang的文件并将修改为“liu” [cqs@centos7 data]$ sed -i "s/zhang/xxxx/g" `grep -rl zhang ./` 总结:sed -i "s/查找字符/替换字符/g" `grep 查找字符 -rl 目录路径`

以上是关于java指定文件夹下查找固定的字符串并将其所在的文件名,行数,该行全部内容写入txt文件中(具体实例)的主要内容,如果未能解决你的问题,请参考以下文章

C++ 查找指定目录下的文件数

C++ 查找指定目录下的文件数

python 查找字符串并将其替换

Linux下文件搜索、查找、查看命令

sql怎样定位一个字符所在的位置?

Linux中如何在指定目录下查找文件?