有一段数据,共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中

解决方案 »

  1.   

    没测试过,只是编译过去了,你调试一下!
    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; }}
      

  2.   

    把数据行对象做成一个类Class A,内部有6个成员变量,
    重写A的compareTo()方法,
    追加write方法,
    用Arrays.sort(A[])排序后,
    数组循环内调用write()方法就可以了。
      

  3.   

    我在开发一个类似这样文本的数据库驱动。
    正在做一些基础工作,比较忙,进度很慢。在csdn的开源里有。qsoftdb.----------------------------------
    有兴趣的朋友可以看看,也可以加盟以下。
      

  4.   

    楼主我修改测试过了
    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; }}
      

  5.   

    测试命令行:
    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次序排列的,不是按照汉语拼音排列的。
      

  6.   

    按拼音排序修改MyComparator 如下
    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
      

  7.   

    谢谢仁兄啊
    对java了解真是深啊
      

  8.   

    不知道为什么,不能结贴了,总是报javascript error错误,怎么办,楼上的兄弟们。