有一段数据,共15行6列,内容如下:
7272,"车江","转扣预存",200704,"衡南县",+0000000022675.73
7273,"车江","转扣预存",200704,"衡南县",+0000000011322.80
7273,"车江","转扣预存",200704,"衡南县",7322.80
7283,"向阳桥","转扣预存",200704,"衡南县",-0000033289.55
7283,"向阳桥","转扣预存",200704,"衡南县",289.55
7291,"三塘","转扣预存",200704,"衡南县",+0000000037059.34
7291,"三塘","转扣预存",200704,"衡南县",-12268.84
7292,"三塘","转扣预存",200704,"衡南县",+0000000016902.98
12043,"廖田","转扣预存",200704,"衡南县",aafd
12043,"廖田","转扣预存",200704,"衡南县",-9809
12043,"廖田","转扣预存",200704,"衡南县",+0000000000212.04
12051,"江口","转扣预存",200704,"衡南县",+0000000030441.11
12051,"江口","转扣预存",200704,"衡南县",26841.11
12051,"江口","转扣预存",200704,"衡南县",+0000000030441.11
12052,"江口","转扣预存",200704,"衡南县",02e574.79
将该数据存储在文本文件A中
要求读入该文件,然后把第6列是正确数值的行取出,按第2列升序排列,再写入到文件B中;把第6列不是正确数值的行写入到文件C中
7272,"车江","转扣预存",200704,"衡南县",+0000000022675.73
7273,"车江","转扣预存",200704,"衡南县",+0000000011322.80
7273,"车江","转扣预存",200704,"衡南县",7322.80
7283,"向阳桥","转扣预存",200704,"衡南县",-0000033289.55
7283,"向阳桥","转扣预存",200704,"衡南县",289.55
7291,"三塘","转扣预存",200704,"衡南县",+0000000037059.34
7291,"三塘","转扣预存",200704,"衡南县",-12268.84
7292,"三塘","转扣预存",200704,"衡南县",+0000000016902.98
12043,"廖田","转扣预存",200704,"衡南县",aafd
12043,"廖田","转扣预存",200704,"衡南县",-9809
12043,"廖田","转扣预存",200704,"衡南县",+0000000000212.04
12051,"江口","转扣预存",200704,"衡南县",+0000000030441.11
12051,"江口","转扣预存",200704,"衡南县",26841.11
12051,"江口","转扣预存",200704,"衡南县",+0000000030441.11
12052,"江口","转扣预存",200704,"衡南县",02e574.79
将该数据存储在文本文件A中
要求读入该文件,然后把第6列是正确数值的行取出,按第2列升序排列,再写入到文件B中;把第6列不是正确数值的行写入到文件C中
import java.io.*;
import java.util.*;
public class TeleRecProc {
/**
* @param args
*/
String correctRecPath;
String wrongRecPath;
BufferedWriter correctRecWriter;
BufferedWriter wrongRecWriter;
LinkedList<String> correctRecSet;
public static void main(String[] args) {
// TODO Auto-generated method stub
if(args.length<3){
System.out.println("Usage:TeleRecProc InputData GoodRecRepository BadRecRepository");
System.exit(-1);
}
try{
BufferedReader br;
br=new BufferedReader(new InputStreamReader(new FileInputStream(args[1])));
String rec;
TeleRecProc teleRecProc=new TeleRecProc();
while((rec=br.readLine())!=null){
if(teleRecProc.isRecCorrect(rec)) teleRecProc.insertCorrectRecSet(rec);
else teleRecProc.writeWrongRec(rec);
}
teleRecProc.sortRec();
teleRecProc.cleanUp();
}catch(IOException ex){
}
}
boolean isRecCorrect(String rec)
{
rec=rec.trim();
rec=rec.substring(rec.lastIndexOf((int)',')+1);
try{
Float.parseFloat(rec);
}catch(NumberFormatException ex){
return false;
}
return true;
}
void writeCorrectRec(LinkedList<String> recSet)throws IOException
{
correctRecWriter=new BufferedWriter(
new OutputStreamWriter
(new FileOutputStream
(correctRecPath,false)
)
);
Iterator<String> it=recSet.iterator();
while(it.hasNext()){
String rec = it.next().toString();
correctRecWriter.write(rec+"\n");
}
}
void writeWrongRec(String rec)throws IOException
{
if(wrongRecWriter==null)
wrongRecWriter=new BufferedWriter(
new OutputStreamWriter
(new FileOutputStream
(wrongRecPath,false)
)
);
wrongRecWriter.write(rec+"\n");
}
void insertCorrectRecSet(String rec)
{
if(correctRecSet==null)correctRecSet=new LinkedList<String>();
correctRecSet.add(rec);
}
void sortRec()
{
Collections.sort(correctRecSet,new MyComparator());
}
void cleanUp()throws IOException
{
if(correctRecWriter!=null){
correctRecWriter.flush();
correctRecWriter.close();
}
if(wrongRecWriter!=null){
wrongRecWriter.flush();
wrongRecWriter.close();
}
}}
=========================================
import java.util.*;
public class MyComparator implements Comparator<String>{
public int compare(String a,String b){
a=a.substring(a.indexOf("\"")+1);
b=b.substring(b.indexOf("\"")+1);
if(a.charAt(0)>b.charAt(0))return 1;
if(a.charAt(0)==b.charAt(0))return 0;
else return -1; }}
重写A的compareTo()方法,
追加write方法,
用Arrays.sort(A[])排序后,
数组循环内调用write()方法就可以了。
正在做一些基础工作,比较忙,进度很慢。在csdn的开源里有。qsoftdb.----------------------------------
有兴趣的朋友可以看看,也可以加盟以下。
import java.io.*;
import java.util.*;
public class TeleRecProc {
/**
* @param args
*/
String correctRecPath;
String wrongRecPath;
BufferedWriter correctRecWriter;
BufferedWriter wrongRecWriter;
LinkedList<String> correctRecSet;
public static void main(String[] args) {
// TODO Auto-generated method stub
if(args.length<3){
System.out.println("Usage:TeleRecProc InputData GoodRecRepository BadRecRepository");
System.exit(-1);
}
try{
BufferedReader br;
br=new BufferedReader(new InputStreamReader(new FileInputStream(args[0])));
String rec;
TeleRecProc teleRecProc=new TeleRecProc(args);
while((rec=br.readLine())!=null){
if(teleRecProc.isRecCorrect(rec)) teleRecProc.insertCorrectRecSet(rec);
else teleRecProc.writeWrongRec(rec);
}
teleRecProc.sortRec();
teleRecProc.cleanUp();
}catch(IOException ex){
System.out.println("in main:"+ex.getLocalizedMessage());
}
System.out.println("done!\n");
}
public TeleRecProc(String[] args)
{
correctRecPath=args[1];
wrongRecPath=args[2];
}
boolean isRecCorrect(String rec)
{
rec=rec.trim();
rec=rec.substring(rec.lastIndexOf((int)',')+1);
try{
Float.parseFloat(rec);
}catch(NumberFormatException ex){
return false;
}
return true;
}
void writeCorrectRec(LinkedList<String> recSet)throws IOException
{
correctRecWriter=new BufferedWriter(
new OutputStreamWriter
(new FileOutputStream
(correctRecPath,false)
)
);
Iterator<String> it=recSet.iterator();
while(it.hasNext()){
String rec = it.next().toString();
correctRecWriter.write(rec);
correctRecWriter.newLine();
}
}
void writeWrongRec(String rec)throws IOException
{
if(wrongRecWriter==null)
wrongRecWriter=new BufferedWriter(
new OutputStreamWriter
(new FileOutputStream
(wrongRecPath,false)
)
);
wrongRecWriter.write(rec);
wrongRecWriter.newLine();
}
void insertCorrectRecSet(String rec)
{
if(correctRecSet==null)correctRecSet=new LinkedList<String>();
correctRecSet.add(rec);
}
void sortRec()
{
Collections.sort(correctRecSet,new MyComparator());
}
void cleanUp()throws IOException
{
writeCorrectRec(correctRecSet);
correctRecWriter.flush();
correctRecWriter.close(); if(wrongRecWriter!=null){
wrongRecWriter.flush();
wrongRecWriter.close();
}
}}
import java.util.*;
public class MyComparator implements Comparator<String>{
public int compare(String a,String b){
a=a.substring(a.indexOf("\"")+1);
a=a.substring(0,a.indexOf("\""));
b=b.substring(b.indexOf("\"")+1);
b=b.substring(0,b.indexOf("\""));
if(a.compareTo(b)>0)return 1;
if(a.compareTo(b)==0)return 0;
else return -1; }}
java c:\disk4\testenv\telerec.txt c:\disk4\testenv\a.txt c:\disk4\testenv\b.txt
telerec.txt 内容为:
7272,"车江","转扣预存",200704,"衡南县",+0000000022675.73
7273,"车江","转扣预存",200704,"衡南县",+0000000011322.80
7273,"车江","转扣预存",200704,"衡南县",7322.80
7283,"向阳桥","转扣预存",200704,"衡南县",-0000033289.55
7283,"向阳桥","转扣预存",200704,"衡南县",289.55
7291,"三塘","转扣预存",200704,"衡南县",+0000000037059.34
7291,"三塘","转扣预存",200704,"衡南县",-12268.84
7292,"三塘","转扣预存",200704,"衡南县",+0000000016902.98
12043,"廖田","转扣预存",200704,"衡南县",aafd
12043,"廖田","转扣预存",200704,"衡南县",-9809
12043,"廖田","转扣预存",200704,"衡南县",+0000000000212.04
12051,"江口","转扣预存",200704,"衡南县",+0000000030441.11
12051,"江口","转扣预存",200704,"衡南县",26841.11
12051,"江口","转扣预存",200704,"衡南县",+0000000030441.11
12052,"江口","转扣预存",200704,"衡南县",02e574.79
==================
a.txt 内容为
7291,"三塘","转扣预存",200704,"衡南县",+0000000037059.34
7291,"三塘","转扣预存",200704,"衡南县",-12268.84
7292,"三塘","转扣预存",200704,"衡南县",+0000000016902.98
7283,"向阳桥","转扣预存",200704,"衡南县",-0000033289.55
7283,"向阳桥","转扣预存",200704,"衡南县",289.55
12043,"廖田","转扣预存",200704,"衡南县",-9809
12043,"廖田","转扣预存",200704,"衡南县",+0000000000212.04
12051,"江口","转扣预存",200704,"衡南县",+0000000030441.11
12051,"江口","转扣预存",200704,"衡南县",26841.11
12051,"江口","转扣预存",200704,"衡南县",+0000000030441.11
7272,"车江","转扣预存",200704,"衡南县",+0000000022675.73
7273,"车江","转扣预存",200704,"衡南县",+0000000011322.80
7273,"车江","转扣预存",200704,"衡南县",7322.80
======================
b.txt内容为
12043,"廖田","转扣预存",200704,"衡南县",aafd
12052,"江口","转扣预存",200704,"衡南县",02e574.79缺点:
排序是按照unicode次序排列的,不是按照汉语拼音排列的。
mport java.text.Collator;
import java.util.*;
public class MyComparator implements Comparator<String>{
public int compare(String a,String b){
a=a.substring(a.indexOf("\"")+1);
a=a.substring(0,a.indexOf("\""));
b=b.substring(b.indexOf("\"")+1);
b=b.substring(0,b.indexOf("\""));
int flag=Collator.getInstance(java.util.Locale.CHINA).compare(a, b);
if(flag==0)return 0;
if(flag<0)return -1;
else return 1; }}
结果
7272,"车江","转扣预存",200704,"衡南县",+0000000022675.73
7273,"车江","转扣预存",200704,"衡南县",+0000000011322.80
7273,"车江","转扣预存",200704,"衡南县",7322.80
12051,"江口","转扣预存",200704,"衡南县",+0000000030441.11
12051,"江口","转扣预存",200704,"衡南县",26841.11
12051,"江口","转扣预存",200704,"衡南县",+0000000030441.11
12043,"廖田","转扣预存",200704,"衡南县",-9809
12043,"廖田","转扣预存",200704,"衡南县",+0000000000212.04
7291,"三塘","转扣预存",200704,"衡南县",+0000000037059.34
7291,"三塘","转扣预存",200704,"衡南县",-12268.84
7292,"三塘","转扣预存",200704,"衡南县",+0000000016902.98
7283,"向阳桥","转扣预存",200704,"衡南县",-0000033289.55
7283,"向阳桥","转扣预存",200704,"衡南县",289.55
对java了解真是深啊