因为工作需要经常要把记事本里这种格式的
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");
}
}
解决方案 »
- 对weakhashmap的一些疑问,哪个大牛能帮忙解答
- java算法
- web系统需要 实时信息交互
- tomcat-deployer.zip和tomcat.zip有什么功能上的区别呢?
- 为什么提示 public boolean isBomb;是非法表达式?急急,谢谢的呀
- 关于eclipse的小问题
- 请问“jcreator"这个软件在那下载?
- 还是关于String 转化成java.sql.Date 的问题,急求解
- Toolkit.getDefaultToolkit().getScreenSize()获取的是全屏幕的大小。我想获取鼠标周围一小范围
- ████ 请问怎么得到系统时间并将其插入到sql server数据库的datatime字段呢?█████
- 有什么好的开源的画图表的程序???
- 从文本文件取值并存放到数组或者其他Collections中的问题
建议
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会更实用点。