<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-16  評論-54  文章-0  trackbacks-0
      2008年10月28日
     

     

    1      基本介紹

    可以說CSV格式的文件經常碰到,何為CSV格式,CVS全稱comma-separated values,就是典型的用逗號隔開的文件,比如下面這種文件格式

    Name,company

    zhangsan,ibm

    lisi,oracle

    這種就是典型的CSV格式文件。不過也可以擴展到其它符號隔開的字符,比如

    Name#company

    Zhangsan#ibm

    Lisi#oracle

    這種也算CSV格式

    Java開源框架CVSReader提供了一個輕量級、簡單方便的統一操作接口可用,下面具體講解如何操作CVS格式

    2      安裝和使用

    2.1下載

    目前CSV reader的最新發布版本是1.8。我們可以從

    http://opencsv.sourceforge.net/

    上面下載到最新的csvreader包。

    2.2安裝

    直接把jar包分別存放到開發工程的類路徑下面即可使用。

    3      讀取CSV格式文件

    3.1基本簡介

    首先,讀取CSV格式的文件需要創建一個CSVReader,如下

    CsvReader reader = new CsvReader(Reader r,  char c);

    其中第一個參數為讀取文件,第二個參數為分割符,比如“,”,或者“#

    另外,也有其它幾個參數,可以查閱API,比如

    CsvReader reader = new CsvReader(InputStream r,  char c, Charset charset);等等

    其次,一般需要讀取頭信息,如下:

    reader.readHeaders();

    String[] headers = reader.getHeaders();

    讀取了后,指針就會移動到下一行,也就是可以開始讀取文件內容

    假如,有多行的話,可以用一個循環套入,例如下面:

                 while (reader.readRecord()) {

                        for (int i = 0; i < headers.length; i++) {

                               String value = reader.get(headers[i]);

                               System.out.print(value+" ");

                        }

                        System.out.println("");

                 }

    3.2綜合例子

    C盤下創建一個測試文件test.cvs,內容如下:

    a#b#c

    1#2#3

    4#5#6

    下面是解析代碼:

          public static void main(String[] args) throws Exception {

    CsvReader reader = new CsvReader(new FileReader("c://csv.txt"), '#');

                 reader.readHeaders();

                 String[] headers = reader.getHeaders();

                 while (reader.readRecord()) {

                        for (int i = 0; i < headers.length; i++) {

                               String value = reader.get(headers[i]);

                               System.out.print(value+" ");

                        }

                        System.out.println("");

                 }

          }

    運行以上程序,可以看到輸出

     1 2 3

     4 5 6

    4      CSV格式文件

    CSV格式文件也比較簡單,寫每一列只要直接調用

    csvWriter.write()即可

    另外,寫完每行結束后,都要調用 csvWriter.endRecord();

    表示結束一行

    文件寫完畢后,要記得刷新一下并關掉,如下:

           csvWriter.flush();

           csvWriter.close();

    代碼如下:

        publicstaticvoid main(String[] args) throws Exception {

           CsvWriter csvWriter = new CsvWriter(new FileWriter("c://test.text"), '#');

           csvWriter.write("name");

           csvWriter.write("company");

           csvWriter.endRecord();

           csvWriter.write("11");

           csvWriter.write("12");

           csvWriter.endRecord();

           csvWriter.write("21");

           csvWriter.write("22");

           csvWriter.flush();

           csvWriter.close();

       }

    }

    運行以上程序,可以看到C盤下面創建了一個文件

    test.text

    內容如下:

    name#company

    11#12

    21#22

    posted @ 2008-10-31 14:42 jspark 閱讀(11805) | 評論 (3)編輯 收藏
         摘要: (本文檔的全篇可以到博客下面的文件列表下載,地址下面)  http://m.tkk7.com/jspark/admin/Files.aspx 為了讓盡快對jbossRules有一個感官的認識,下面先開發一個HelloWorld的程序。 建立一個java工程,目錄如下:     如上所示,建立一個com包,然后在下面分別建立一個Sa...  閱讀全文
    posted @ 2008-10-28 15:54 jspark 閱讀(1634) | 評論 (0)編輯 收藏
     

    1      Java規則系統簡介

    在大型商業系統中,業務規則、商業邏輯等等都會比較復雜。而且在很多大型系統當中,很多業務規則、商業邏輯并不是一成不變的。甚至當系統進入生產階段時,客戶的業務規則、商業邏輯也會改變。某些系統要求甚至更高,要求能24小時不停機,并且能夠實時修改商業規則。這就對商業系統提出了較大的挑戰。如果將這些可變的規則直接編寫到代碼里面的話,業務規則一旦改變,就要修改代碼。并由此帶來編譯、打包、發布等等問題。這對于生產系統來說是極不方便的。因此,如何考慮把一些可變的業務規則抽取到外面,使這些業務規則獨立于程序代碼。并最好是能夠實時的修改業務規則,這樣就可以做到不用打包編譯發布等等。

    值得慶幸的是現在出現了一些Java規則引擎(Rule Engine),專門解決以上所述的問題。利用它,我們就可以在應用系統中分離客戶的商業決策邏輯和應用開發者的技術決策,并把這些商業規額則放在中心數據庫或其他統一的地方,讓它們能在運行時可以動態地管理和修改。

    JbossRules是一個優秀的JAVA規則引擎,其前身是Drools3,后來被Jboss合并并改名為JbossRules

    1.1基于規則的專家系統簡介

    人工智能是一個新興的學科,它是想讓計算機模擬人腦的思維和推理模式。人工智能分成如下幾個主要的分學科:

    知識表示

    神經網絡

    基因算法

    決策樹

    專家系統

    等等幾個學科

    知識表示是人工智能中的一個基礎領域,其目的是如何更好的在計算機當中描述已存在的事實。專家系統就是使用知識表示,來做規則推理,得出最后的結論來。

    Java規則引擎起源于基于規則的專家系統,而基于規則的專家系統又是專家系統的其中一個分支。專家系統屬于人工智能的范疇,它模仿人類的推理方式,使用試探性的方法進行推理,并使用人類能理解的術語解釋和證明它的推理結論。為了更深入地了解Java規則引擎,下面簡要地介紹基于規則的專家系統。RBES包括三部分:Rule Baseknowledge base)、Working Memoryfact base)和Inference Engine。它們的結構如下系統所示:

    如上圖所示,推理引擎包括三部分:模式匹配器(Pattern Matcher)、議程(Agenda)和執行引擎(Execution Engine)。推理引擎通過決定哪些規則滿足事實或目標,并授予規則優先級,滿足事實或目標的規則被加入議程。模式匹配器決定選擇執行哪個規則,何時執行規則;議程管理模式匹配器挑選出來的規則的執行次序;執行引擎負責執行規則和其他動作。

    和人類的思維相對應,推理引擎存在兩者推理方式:演繹法(Forward-Chaining)和歸納法(Backward-Chaining)。演繹法從一個初始的事實出發,不斷地應用規則得出結論(或執行指定的動作)。而歸納法則是根據假設,不斷地尋找符合假設的事實。Rete算法是目前效率最高的一個Forward-Chaining推理算法,許多Java規則引擎都是基于Rete算法來進行推理計算的。

    正向推理:

     

    正向推理圖形如下:

    正向推理引擎的推理步驟如下:

    將初始數據(fact)輸入Working Memory。

    使用Pattern Matcher比較規則庫(rule base)中的規則(rule)和數據(fact)。

    如果執行規則存在沖突(conflict),即同時激活了多個規則,將沖突的規則放入沖突集合。

    解決沖突,將激活的規則按順序放入Agenda。

    使用執行引擎執行Agenda中的規則。重復步驟25,直到執行完畢所有Agenda中的規則。

    直到得出最終的結果為止

    反向推理:

     

    反向推理是目標驅動的推理方式。從目標出發,找出所有能滿足該目

    標的子目標。這樣一直推導下去,直到所有的子目標都已經滿足為止。

    1.2Java規則引擎

    Java規則引擎是一種嵌入在Java程序中的組件,它的任務是把當前提交給引擎的Java數據對象與加載在引擎中的業務規則進行測試和比對,激活那些符合當前數據狀態下的業務規則,根據業務規則中聲明的執行邏輯,觸發應用程序中對應的操作。

    一般來說,一條規則的形式如下:

    when

        <conditions>

    then

        <actions>

    也就是說,當conditions成立的話,就做下面的actions。其中actions可以為生成新的事實、或者做其他動作,比如,發送email通知、執行一些本地任務等等。

    1.3    JAVA規則引擎的優點

    聲明式編程

    聲明式編程,規則引擎讓我們直到“做什么”,而不用直到“怎么做”。我們只要把一系列規則表示出來后。具體的推理動作就交給規則引擎來處理。

    邏輯和數據分開

    將可變的業務邏輯和數據分開。雖然,這違背了面向對象原則。面向對象強調數據和業務邏輯耦合。但是,對于一些易變而復雜的業務規則。如果散步在程序的各個地方、各個層次。那么一旦業務規則更改的話,就會出現“牽一發而動全身”的局面。因此,將可變的業務邏輯獨立出來管理,將有助于后面的業務變更。

    性能

    Rete算法的性能比較高。

    知識集中表示

    通過使用規則,我們把規則集中存放起來,從而使系統知識能夠集中表示。

    可讀性

    規則的可讀性比較高。對于熟悉業務規則。但不會程序開發的業務專家,只要熟悉規則的標示,也可以編寫和修改業務規則。

    1.4    使用JAVA規則系統的場合

    那么,在那些場合下適合應用JAVA規則系統呢?總而言之,可以用一句話來概括:當用傳統的程序開發,無法得到一種優雅的解決方法的時候,就可以考慮使用規則系統。如下的一些場合:

    用傳統的代碼開發比較復雜、繁瑣

    問題雖然不復雜,但是用傳統的代碼開發比較脆弱,也就是經常修改

    沒有優雅的算法

    業務規則頻繁改變

    有很多業務專家、不懂技術開發

    1.5    不適合使用JAVA規則系統場合

    雖然規則系統看起來比較不錯,但是并不是任何地方都可以使用規則系統。很多簡單、固定的業務系統,可以不用使用規則系統。規則系統也不能用來作為標示重要的業務流程、不能用來作為工作流引擎。

    有很多程序員把JAVA規則系統當成是一種動態修改配置。也就是把一部分代碼邏輯抽取到外面,統一存放起來。這樣,當一些配置修改的話,通過修改規則,就能修改代碼的一部分邏輯。如果把JAVA規則僅僅用在這個場合下的話,可以考慮采用腳本引擎。比如BeanShell、JEXL、Groovy等等。

    posted @ 2008-10-28 12:15 jspark 閱讀(1562) | 評論 (1)編輯 收藏
    主站蜘蛛池模板: heyzo亚洲精品日韩| 国产成人精品日本亚洲专区| 久久久久久久久无码精品亚洲日韩| 无码不卡亚洲成?人片| 久久免费国产精品一区二区| 国产精品高清视亚洲一区二区 | 午夜国产大片免费观看| 久久er国产精品免费观看8| 亚洲视频免费播放| 四虎影视在线永久免费看黄| 成人毛片100免费观看| 亚洲免费观看网站| 亚洲精品国产精品国自产观看| 最近中文字幕免费mv在线视频| 苍井空亚洲精品AA片在线播放 | 亚洲AV午夜福利精品一区二区| 成年人网站在线免费观看| 三上悠亚电影全集免费| 亚洲大成色www永久网址| 亚洲精品无码Av人在线观看国产 | 亚洲精品无码日韩国产不卡?V| 国产大片91精品免费观看不卡| 香蕉视频免费在线播放| 亚洲国产韩国一区二区| 亚洲精品无码日韩国产不卡?V| 无码免费午夜福利片在线 | 美女又黄又免费的视频| 亚洲制服中文字幕第一区| 亚洲国产aⅴ综合网| 97无码免费人妻超级碰碰夜夜| 久久er国产精品免费观看2| 精品国产亚洲第一区二区三区 | 免费h视频在线观看| 免费无码国产V片在线观看| 亚洲 日韩经典 中文字幕| 久久精品国产亚洲香蕉| 亚洲精品成人区在线观看| 午夜视频免费成人| 中国在线观看免费国语版| 精品无码无人网站免费视频| 成人无码区免费A∨直播|