Java 多文件的多线程处理
我有一个java程序,可以执行以下算法:Java 多文件的多线程处理,java,multithreading,Java,Multithreading,我有一个java程序,可以执行以下算法: Given a directory. For each file in the directory. read each line process the line with regex and other string operation in addition to parsing write the line after processing to an output file 该目录大约有10个文件,大约
Given a directory.
For each file in the directory.
read each line
process the line with regex and other string operation in addition to parsing
write the line after processing to an output file
该目录大约有10个文件,大约有300万行
由于正则表达式的复杂性,处理部分似乎是性能的瓶颈,而解析部分则更慢。
因为我有一台功能强大的机器,有大量的ram,而且正如“cat/proc/cpuinfo | grep processor | wc-l”所述,它包含16个CPU。如果不把这些事情牵扯进来,那将是令人伤心的
我的想法是首先将所有文件读入一个数组列表。然后将列表划分为与所需线程数相等的子数组列表。在运行线程之后,每个线程都要执行给定的子列表
同时处理部分,并将输出保存到新的子阵列中,该子阵列最后应合并并刷新到输出文件中
这是解决这个问题的正确方法吗
如能参考其他类似作品,将不胜感激
非常感谢
String dir = "path/to/dir";
File folder = new File(dir);
if (folder.isDirectory()) {
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
File file = listOfFiles[i];
if (file.isFile() && file.getName().contains("log")) {
System.out.println("processing file: " + file);
test.readFile(file);
}
}
}
}
PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(output), StandardCharsets.UTF_8), true);
public void readFile(File file) {
FileInputStream fis = null;
BufferedReader br = null;
String line;
try {
fis = new FileInputStream(file);
br = new BufferedReader(new InputStreamReader(fis,
Charset.forName("UTF-8")));
while ((line = br.readLine()) != null) {
String processedLine = processingLine(line);
if (processedLine != null){
pw.println(processedLine);
}
}
} catch (IOException e) {
}
}
public String processingLine(String line) {
//regex
//string operations
//parsing text
}
String dir=“path/to/dir”;
文件夹=新文件(目录);
if(folder.isDirectory()){
File[]listOfFiles=folder.listFiles();
for(int i=0;i
- 使用java.util.concurrency.Executors为每个文件处理生成子线程李>
- 使用同步队列收集结果李>
- 在单独的线程中处理收集的队列,将数据(安全且未损坏)写入输出