gpt4 book ai didi

java - 在文件中搜索字符串并将匹配的行写入Java中的另一个文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:07:45 25 4
gpt4 key购买 nike

用于在文件中搜索字符串并将匹配字符串的行写入另一个一个 70MB(压缩状态)的 zip 文件需要 15 - 20 分钟。有什么办法可以减少它。

我的源代码:

获取 Zip 文件条目

zipFile = new ZipFile(source_file_name);

entries = zipFile.entries();

while (entries.hasMoreElements())

{ ZipEntry entry = (ZipEntry)entries.nextElement();

if (entry.isDirectory())
{
continue;
}
searchString(Thread.currentThread(),entry.getName(), new BufferedInputStream (zipFile.getInputStream(entry)), Out_File, search_string, stats); }

zipFile.close();

搜索字符串

public void searchString(Thread CThread, String Source_File, BufferedInputStream in, File outfile, String search, String stats) throws IOException

{

int count = 0;
int countw = 0;
int countl = 0;
String s;
String[] str;
BufferedReader br2 = new BufferedReader(new InputStreamReader(in));
System.out.println(CThread.currentThread());

while ((s = br2.readLine()) != null)
{
str = s.split(search);
count = str.length - 1;
countw += count; //word count
if (s.contains(search))
{
countl++; //line count
WriteFile(CThread,s, outfile.toString(), search);
}
}

br2.close();
in.close();


}

--------------------------------------------------------------------------------

public void WriteFile(Thread CThread,String line, String out, String search) throws IOException

{
BufferedWriter bufferedWriter = null;
System.out.println("writre thread"+CThread.currentThread());
bufferedWriter = new BufferedWriter(new FileWriter(out, true));
bufferedWriter.write(line);
bufferedWriter.newLine();
bufferedWriter.flush();
}

请帮帮我。使用线程处理 10 个文件真的需要 40 分钟,压缩后处理一个 70MB 的文件需要 15-20 分钟。任何减少时间的方法。

最佳答案

您正在为您编写的每一行重新打开文件输出句柄。

这可能会对性能产生巨大的影响,远远超过其他性能问题。相反,我建议创建 BufferedWriter 一次(例如,在第一次匹配时),然后保持打开状态,写入每个匹配行,然后关闭 Writer 完成后。

此外,删除对 flush() 的调用;无需刷新每一行,因为调用 Writer.close() 会自动将任何未写入的数据刷新到磁盘。

最后,作为旁注,您的变量和方法命名风格不遵循 Java 驼峰式大小写约定;您可能需要考虑更改它。

关于java - 在文件中搜索字符串并将匹配的行写入Java中的另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2857763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com