这是某大型杀毒软件公司2014年4月份笔试试题第一大题的第1题,当时时间不够没做完,回来之后花了点时间自己在电脑上写了一下,题目主要涉及IO的问题,第一次发帖,请大家指出不足之处,转载请注明出处。
/* 程序来源:实习生招聘
* 源文件名称:LogMerge.java
* 要 点:
* 系统某一目录下存放有按月份命名的系统告警信息文件
* 如03.log的内容为:
* App1 crashed
* App2 started
* 在不考虑文件过大的情况下编程实现统计合并某一年的12个日志文件为一个,并去除冗余的告警
*/
import java.io.*;
import java.util.*;
public class LogMerge{
File[] files = null;
public LogMerge(String path){
listFiles(path);
merge(path);
}
private File[] listFiles(String path){
File file = new File(path);
if(file.isDirectory())
files = file.listFiles();
return files;
}
private void merge(String path){
File logsfile = new File(path+"/logs.log");
try{
FileOutputStream afos = new FileOutputStream(logsfile,true);
BufferedWriter abw = new BufferedWriter(new OutputStreamWriter(afos) );
Set<String> set = new HashSet<String>();
if(files != null){
for(int i = 0;i<files.length;i++){
File file = files[i];
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String str = null;
while((str = br.readLine())!=null)
set.add(str.trim());
br.close();
fis.close();
}
}
Iterator<String> it = set.iterator();
while(it.hasNext()){
abw.write(it.next());
abw.newLine();
}
abw.flush();
abw.close();
afos.close();
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args){
new LogMerge("D:\Workspaces\javatest\LogMerge\logtest");
}
}