因为工作需要经常要把记事本里这种格式的
13861322723 13861322733 13861322760 13861322782 13861322800 13861322840 13861322856 13861322857 13861322888 13861322926 13861322962 13861322982 13861322985 13861322986
转换成如以下格式的
13861322723
13861322733
13861322760
13861322782
13861322800
13861322840
13861322856
13861322857
13861322888
由于数据量非常大,经常可能有几十万号码,.txt文件达到2,3M,小弟写的程序只能处理几千号码,上万就不行了,请问怎么修改一下package cmn.oms.region;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;public class Division
{
protected static Division div;
static String filevalue = "";
public static Division getInstance()
{
if (div != null)
return div;
div = new Division();
return div;
}
public Division()
{
String filename = "D:\\vip.txt";
File mobile_file = new File(filename);
System.out.println("Start....");
if (mobile_file.exists())
filevalue = readFile(mobile_file);
else
System.err.println("[Division] [file-missing] []");
}
public String readFile(File mobile_file)//把文件读出并按要求格式化文字
{
int length_file = (int) mobile_file.length();
byte[] file_byte = new byte[length_file];
java.io.BufferedInputStream in_stream = null;
String value = "";
try
{
in_stream =
new java.io.BufferedInputStream(
new java.io.FileInputStream(mobile_file));
in_stream.read(file_byte);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
in_stream.close();
}
catch (Exception e)
{
}
}
try
{
String str_file = new String(file_byte);
String[] str_arr = str_file.split(" ");
for(int i = 0;i < str_arr.length;i++)
{
if (str_arr[i].endsWith("\r"))
str_arr[i] =
str_arr[i].substring(0, str_arr[i].length() - 1);
value += str_arr[i] + "\r\n";
}
return value;
}
catch(Exception e)
{
e.printStackTrace();
return "";
}
}
public void writefile()//写入的方法
{
String filename2 = "D:\\vip2.txt";
File mobile_file2 = new File(filename2);
BufferedWriter bWriter;
try
{
bWriter = new BufferedWriter(new FileWriter(mobile_file2); bWriter.write(filevalue);
bWriter.newLine();
bWriter.flush();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
public static void main(String args[]) throws Exception
{
Division ds = new Division();
ds.writefile();
System.out.println("Done");
}
}
13861322723 13861322733 13861322760 13861322782 13861322800 13861322840 13861322856 13861322857 13861322888 13861322926 13861322962 13861322982 13861322985 13861322986
转换成如以下格式的
13861322723
13861322733
13861322760
13861322782
13861322800
13861322840
13861322856
13861322857
13861322888
由于数据量非常大,经常可能有几十万号码,.txt文件达到2,3M,小弟写的程序只能处理几千号码,上万就不行了,请问怎么修改一下package cmn.oms.region;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;public class Division
{
protected static Division div;
static String filevalue = "";
public static Division getInstance()
{
if (div != null)
return div;
div = new Division();
return div;
}
public Division()
{
String filename = "D:\\vip.txt";
File mobile_file = new File(filename);
System.out.println("Start....");
if (mobile_file.exists())
filevalue = readFile(mobile_file);
else
System.err.println("[Division] [file-missing] []");
}
public String readFile(File mobile_file)//把文件读出并按要求格式化文字
{
int length_file = (int) mobile_file.length();
byte[] file_byte = new byte[length_file];
java.io.BufferedInputStream in_stream = null;
String value = "";
try
{
in_stream =
new java.io.BufferedInputStream(
new java.io.FileInputStream(mobile_file));
in_stream.read(file_byte);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
in_stream.close();
}
catch (Exception e)
{
}
}
try
{
String str_file = new String(file_byte);
String[] str_arr = str_file.split(" ");
for(int i = 0;i < str_arr.length;i++)
{
if (str_arr[i].endsWith("\r"))
str_arr[i] =
str_arr[i].substring(0, str_arr[i].length() - 1);
value += str_arr[i] + "\r\n";
}
return value;
}
catch(Exception e)
{
e.printStackTrace();
return "";
}
}
public void writefile()//写入的方法
{
String filename2 = "D:\\vip2.txt";
File mobile_file2 = new File(filename2);
BufferedWriter bWriter;
try
{
bWriter = new BufferedWriter(new FileWriter(mobile_file2); bWriter.write(filevalue);
bWriter.newLine();
bWriter.flush();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
public static void main(String args[]) throws Exception
{
Division ds = new Division();
ds.writefile();
System.out.println("Done");
}
}
建议
while(){
读1行->转换->写入新文件
}
http://matrix.foresee.cn/blogs/neo/books/tao_regexps_zh.html#Regular_Expressions_In_Various_Tools
public Division() throws IOException {
BufferedReader r = new BufferedReader(new FileReader("D:\\vip.txt"));
BufferedWriter w = new BufferedWriter(new FileWriter("D:\\vip2.txt"));
for (int a = r.read(); a != -1; a = r.read()) {
if (a == ' ') {
w.write("\r\n");
} else {
w.write(a);
}
}
}
}
if (a == ' ') {
w.write("\r\n");
} else {
w.write(a);
}使用BufferedReader和BufferedWriter 关键是那个FOR子句当然如果是有规律的话,也可以改改步长,比如11位的号码,那用12位步长,每次写完加个换行
楼上的,几十万个号,用Editplus手动修改?
EDITPLUS如此强大的替换功能,竟然要手动? 呵
文件的总位数一定能被12整除,那么引入多线程进行切割并行转换,再进行合并,不就解决了楼主的问题了吗?其实写成CMD会更实用点。