阅读大容量txt文件并写入txt文件中
从txt文件中读取文件(txt有200w行),并写入txt中。有没有高手给个多线程读写txt的demo。我写的代码如下,但时间太长
求高手指教
package SavereadTxt;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class readtxt2
{
private static final String FULL_LOCALPATH = null;
private static final String LOCAL_PATH = null;
/* private String[] parserData(String data)
{
// 查询已经使用的实时标签配置参数ID
List list = AttributeFileLabelService.getInstance().queryRule();
// 以"|"分隔
String[] realTimeInfoArray = data.split("\\|", -1);
String[] writer = new String[0];
int phoneValue = AttributeFileLabelService.getInstance().queryPhoneValue();
if (list != null && !list.isEmpty() && realTimeInfoArray.length > 1)
{
writer = new String[list.size() * realTimeInfoArray.length];
int columnValue = -1;
String realTimeValue = "";
String value = "";
String labelId = "";
boolean isTrue = false;
int k = 0;
String telephone = "";
for (int i = 0; i < list.size(); i++)
{
Hashtable hm = (Hashtable)list.get(i);
realTimeValue = ADMUtil.tostring(hm.get("realtime_value"), "");
columnValue = Integer.parseInt(ADMUtil.tostring(hm.get("column_value"), ""));
labelId = ADMUtil.tostring(hm.get("label_id"), "");
if (columnValue >= 1 && columnValue <= realTimeInfoArray.length && phoneValue > 0)
{
value = realTimeInfoArray[columnValue - 1];
telephone = realTimeInfoArray[phoneValue - 1];
if (ADMUtil.tostring(hm.get("realtime_match_mode"), "").equals("0"))
{
isTrue = parseEqual(value, realTimeValue);// 相等
}
else if (ADMUtil.tostring(hm.get("realtime_match_mode"), "").equals("1"))
{
isTrue = parseContain(value, realTimeValue);// 包含于
}
else
{
isTrue = parseSame(value, realTimeValue);// 类似于
}
if (isTrue)
{
writer[k++] = labelId + "|" + telephone;
}
}
}
}
return writer;
}
@SuppressWarnings("rawtypes")*/
public void analyseAttributeFile()
{
// 本地存放话单文件的目录
File localDir = new File(FULL_LOCALPATH);
File[] fileList = localDir.listFiles();
String[] strs = null;
// 如果本地经分文件话单目录不存在或则为空,直接return
if (!localDir.exists() || fileList.length == 0)
{
System.out.println("Local CDR directory dose not exists or is empty! localPath:" + FULL_LOCALPATH);
return;
}
try
{
File localFile = new File(LOCAL_PATH);
if (!localFile.exists())
{
if (!localFile.mkdir())
{
System.out.println("mkdir file error!LOCAL_PATH:" + LOCAL_PATH);
return;
}
}
String str = "";
for (File file : fileList)
{
// 过滤目录
if (file.isDirectory())
{
continue;
}
String id;
StringBuffer phone;
BufferedReader br = null;
BufferedWriter wr = null;
Map<String, StringBuffer> map = new HashMap<String, StringBuffer>();
br = new BufferedReader(new FileReader(file));
StringBuffer[] sb;
while ((str = br.readLine()) != null)
{
if (str != null)
{
id = str.split("\\|")[0];
phone = new StringBuffer(str.split("\\|")[1]);
if (map.containsKey(id))
{
map.put(id, phone.append("\r" + map.get(id)));
}
else
{
map.put(id, phone);
}
}
}
// 关闭流
for (Entry<String, StringBuffer> entry : map.entrySet())
{
wr = new BufferedWriter(new FileWriter(new File(LOCAL_PATH + "/" + entry.getKey() + ".TXT"), true));
wr.write(entry.getValue().toString()+ "\r");
wr.close();
}
br.close();
}
}
catch (Exception e)
{
System.out.println("analyseAttribute File failed!");
e.printStackTrace();
}
}
}