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

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

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

    qiyadeng

    專注于Java示例及教程
    posts - 84, comments - 152, trackbacks - 0, articles - 34

    本文介紹,如果把Java Project轉換為Java Web Project,應該在多數的Eclipse的版本都類似。

    1.Java Project

    一個Java Projec,在Eclipse中顯示的是一個“J”的藍色文件夾。

    2.Project Facets

    右鍵項目屬性Properties,右側選擇菜單Project Facets,點擊converted to faceted form...

    勾選dynamic web module

    選擇下面的further configuration available

    項目中的Web目錄和設置保持一致。

    3.Java Web Project

    這樣你就轉換到了Java Web Project。

    原創文章,轉載請注明: 轉載自http://www.qiyadeng.com/

    本文鏈接地址: Eclipse中Java Project轉換為Java Web Project


    posted @ 2013-03-24 21:58 qiyadeng 閱讀(7553) | 評論 (4)編輯 收藏

    1.新建Project

    新建Java Project,并把mongo-java-driver驅動加入到項目bulid path中,如果你使用的是maven增加依賴。


          <dependency>
              
    <groupId>org.mongodb</groupId>
              
    <artifactId>mongo-java-driver</artifactId>
              
    <version>2.10.1</version>
          
    </dependency>

    2.連接上MongoDB

    //>2.10版本
    MongoClient mongo = new MongoClient( "localhost" , 27017 );

    //老版本  
    Mongo mongo = new Mongo("localhost"27017);

    如果需要驗證,需要輸入用戶名和密碼


        MongoClient mongoClient = new MongoClient();
        DB db 
    = mongoClient.getDB("database name");
        
    boolean auth = db.authenticate("username""password".toCharArray());
    3.MongoDB數據庫

    得到MongoDB中的數據庫,如果數據庫名不存在,MongoDB會自動創建


    DB db = mongo.getDB("database name");
    顯示所有的數據庫
        List<String> dbs = mongo.getDatabaseNames();
        
    for(String db : dbs){
            System.out.println(db);
        }
    4.MongoDB Collection(MongoDB表)

    得到數據庫中的表

        DB db = mongo.getDB("testdb");
        DBCollection table 
    = db.getCollection("user");
    顯示數據庫中的所有表
        DB db = mongo.getDB("testdb");
        Set
    <String> tables = db.getCollectionNames();
     
        
    for(String coll : tables){
            System.out.println(coll);
        }
    5.插入、查找、更新、刪除操作

    插入數據,向Collection(表)中插入一個Document

        DBCollection table = db.getCollection("user");
        BasicDBObject document 
    = new BasicDBObject();
        document.put(
    "name""qiyadeng");
        document.put(
    "age"30);
        document.put(
    "createdDate"new Date());
        table.insert(document);
    更新Document中的name="qiyadeng.com"
    	
        DBCollection table = db.getCollection("user");

         BasicDBObject query 
    = new BasicDBObject();
        query.put(
    "name""qiyadeng");

        BasicDBObject newDocument 
    = new BasicDBObject();
        newDocument.put(
    "name""qiyadeng.com");

        BasicDBObject updateObj 
    = new BasicDBObject();
        updateObj.put(
    "$set", newDocument);
     
        table.update(query, updateObj);
    從Collection中查找name="qiyadeng.com"的Document
        DBCollection table = db.getCollection("user");
     
        BasicDBObject searchQuery 
    = new BasicDBObject();
        searchQuery.put(
    "name""qiyadeng.com");
     
        DBCursor cursor 
    = table.find(searchQuery);
     
        
    while (cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    刪除name="qiyadeng"的Document
        DBCollection table = db.getCollection("user");
     
        BasicDBObject searchQuery 
    = new BasicDBObject();
        searchQuery.put(
    "name""qiyadeng.com");
     
        table.remove(searchQuery);

    6.完整的例子
    package com.qiyadeng.mongodb;


    import java.util.Date;

    import com.mongodb.BasicDBObject;
    import com.mongodb.DB;
    import com.mongodb.DBCollection;
    import com.mongodb.DBCursor;
    import com.mongodb.MongoClient;

    public class MongoDBSample {

        
    public static void main(String[] args) throws Exception{
                 
                
    /**** Connect to MongoDB ****/
                
    //2.10.0后,使用MongoClient
                MongoClient mongo = new MongoClient("localhost"27017);
             
                
    /**** Get database ****/
                
    // if database doesn't exists, MongoDB will create it for you
                DB db = mongo.getDB("testdb");
             
                
    /**** Get collection / table from 'testdb' ****/
                
    // if collection doesn't exists, MongoDB will create it for you
                DBCollection table = db.getCollection("user");
             
                
    /**** Insert ****/
                
    // create a document to store key and value
                BasicDBObject document = new BasicDBObject();
                document.put(
    "name""qiyadeng");
                document.put(
    "age"30);
                document.put(
    "createdDate"new Date());
                table.insert(document);
             
                
    /**** Find and display ****/
                BasicDBObject searchQuery 
    = new BasicDBObject();
                searchQuery.put(
    "name""qiyadeng");
             
                DBCursor cursor 
    = table.find(searchQuery);
             
                
    while (cursor.hasNext()) {
                    System.out.println(cursor.next());
                }
             
                
    /**** Update ****/
                
    // search document where name="qiyadeng" and update it with new values
                BasicDBObject query = new BasicDBObject();
                query.put(
    "name""qiyadeng");
             
                BasicDBObject newDocument 
    = new BasicDBObject();
                newDocument.put(
    "name""qiyadeng.com");
             
                BasicDBObject updateObj 
    = new BasicDBObject();
                updateObj.put(
    "$set", newDocument);
             
                table.update(query, updateObj);
             
                
    /**** Find and display ****/
                BasicDBObject searchQuery2 
                    
    = new BasicDBObject().append("name""qiyadeng.com");
             
                DBCursor cursor2 
    = table.find(searchQuery2);
             
                
    while (cursor2.hasNext()) {
                    System.out.println(cursor2.next());
                }
        }
    }


    輸出

    "_id" : { "$oid" : "51444c88874c79654063356b"} , "name" : "qiyadeng" , "age" : 30 , "createdDate" : { "$date" : "2013-03-16T10:42:16.555Z"}}
    "_id" : { "$oid" : "51444c88874c79654063356b"} , "age" : 30 , "createdDate" : { "$date" : "2013-03-16T10:42:16.555Z"} , "name" : "qiyadeng.com"}

    使用mongo驗證創建的數據庫testdb,collection user是否存在。


    原創文章,轉載請注明: 轉載自http://www.qiyadeng.com/

    本文鏈接地址: Java和MongoDB之Hello World



    posted @ 2013-03-19 22:17 qiyadeng 閱讀(2196) | 評論 (0)編輯 收藏

    本文介紹如何安裝在windows 7中安裝MongoDB。
    注:MongoDB并不像Windows上安裝其他軟件,只需要下載Zip包并解壓,然后配置數據存放目錄并啟動即可。

    1.下載MongoDB

    從MongoDB官方網站,根據你的平臺選擇對應的windows的壓縮包并解壓,本文解壓到D:\mongodb\。


    注:如果需要在命令行中快速使用MongoDB bin目錄下的命令,可以將D:\mongoDB\bin加入到Window環境變量。

    2.配置數據文件

    在D:\mongodb\創建mongo.config文件,如下(并在d:\mongodb目錄下新建data,log文件夾)
    ##數據存儲的位置
    dbpath
    =D:\mongodb\data
     
    ##所有的輸出位置
    logpath
    =D:\mongodb\log\mongo.log
     
    ##日志讀寫操作
    diaglog
    =3

    3.運行MongoDB Server

    在命令控制行,切換到d:\mongodb\bin目錄下,使用命令mongod.exe --config d:\mongdb\mongo.config啟動MongoDb Server。
    D:\mongodb\bin>mongod.exe --config d:\mongodb\mongo.config
    all output going to
    : D:\mongodb\log\mongo.log

    4.連接MongoDB

    新開啟一個命令行控制窗口,使用mongo.exe連接MongoDB Server.

    5.設置MongoDB為Windows服務

    在命令行控制窗口,加入--install選項可以把MongoDB安裝為Windows服務。
    D:\mongodb\bin>mongod.exe --config d:\mongodb\mongo.config
    啟動MongoDB的命令為:net start MongoDB

    停車MongODB的命令為:net stop MongoDB

    刪除MongoDB的命令為:mongod --remove

    原創文章,轉載請注明: 轉載自http://www.qiyadeng.com/

    本文鏈接地址: 在Window平臺安裝MongoDB

    posted @ 2013-03-18 22:33 qiyadeng 閱讀(2979) | 評論 (1)編輯 收藏

    1.設置成為開發者模式

    登錄微信工作平臺,選擇高級功能-進入開發模式,成為開發者。需要做如下圖配置。URL配置的信息是指,微信的后臺服務器把您的用戶消息發送到該URL處理。Token是你和微信之間的一個密碼,用來驗證消息是否是從微信的服務發送而來,而不是其他來攻擊你的系統。


    現在你還不能設置,在設置時微信會GET請求你設置的URL,已檢測接口是否可以使用。只有等你準備好GET方法之后才可以進行設置。


    2.實現GET方法

    從文檔中知道,我們需要實現POST和GET方法,GET方法用于驗證微信和你的通訊驗證,POST用于消息處理。

    新建Servlet HelloWeChat,先實現其中的GET方法


        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
    // TODO 為了簡單起見,先不對消息來源進行校驗
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter pw 
    = response.getWriter();
            String echo 
    = request.getParameter("echostr");
            echo 
    = new String(echo.getBytes("ISO-8859-1"),"UTF-8");
            pw.println(echo);
        }
    可以在本地使用http://localhost:8080/QiyadengWeb/HelloWeChat?echostr=hello中文,先進行測試,如果沒有問題,可以部署到服務器上,然后在微信公眾平臺進行設置了。

    3.實現POST方法

    POST方法首先接收到微信公眾平臺傳送過來的XML,從中提取消息發送人和消息內容。更加消息發送內容,你可以增加自己的處理邏輯,最后拼裝成回復消息XML,返回給微信公眾平臺。


        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType(
    "text/html;charset=UTF-8");
            PrintWriter pw 
    = response.getWriter();
            String wxMsgXml 
    = IOUtils.toString(request.getInputStream(),"utf-8");
            WeChatTextMessage textMsg 
    = null;
            
    try {
                textMsg 
    = getWeChatTextMessage(wxMsgXml);
            } 
    catch (Exception e) {
                e.printStackTrace();
            }
            StringBuffer replyMsg 
    = new StringBuffer();
            
    if(textMsg != null){
                
    //增加你所需要的處理邏輯,這里只是簡單重復消息
                replyMsg.append("您給我的消息是:");
                replyMsg.append(textMsg.getContent());
            }
            
    else{
                replyMsg.append(
    ":)不是文本的消息,我暫時看不懂");
            }
            String returnXml 
    = getReplyTextMessage(replyMsg.toString(), textMsg.getFromUserName());
            pw.println(returnXml);
        }

    關于調試,這里推薦一個工具Fiddler,你可以模擬微信的POST消息到你的本地,而不必每次部署到服務器上進行調試。關于Fiddler的POST數據使用方法,可以參考下圖標注內容。

    4.部署并測試

    完成第一步,并和你的公眾帳號好進行對話,回復消息沒有問題的話,那就恭喜你了

    5.依賴庫

    使用maven的同學,添加以下依賴即可。非maven用戶,找到這些庫添加到buider path中即可。


          <dependency>
              
    <groupId>joda-time</groupId>
              
    <artifactId>joda-time</artifactId>
              
    <version>2.2</version>
          
    </dependency>
          
    <dependency>
              
    <groupId>org.apache.commons</groupId>
              
    <artifactId>commons-io</artifactId>
              
    <version>1.3.2</version>
          
    </dependency>
          
    <dependency>
              
    <groupId>com.thoughtworks.xstream</groupId>
              
    <artifactId>xstream</artifactId>
              
    <version>1.4.3</version>
          
    </dependency>
    6.完整的代碼
    package com.qiyadeng.wechat;

    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Date;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.commons.io.IOUtils;

    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.xml.DomDriver;

    /**
     * Servlet implementation class HelloWeChat
     
    */
    public class HelloWeChat extends HttpServlet {
        
    private static final long serialVersionUID = 1L;
           
        
    /**
         * 
    @see HttpServlet#HttpServlet()
         
    */
        
    public HelloWeChat() {
            
    super();
        }

        
    /**
         * 
    @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         
    */
        
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
    // TODO 為了簡單起見,先不對消息來源進行校驗
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter pw 
    = response.getWriter();
            String echo 
    = request.getParameter("echostr");
            echo 
    = new String(echo.getBytes("ISO-8859-1"),"UTF-8");
            pw.println(echo);
        }

        
    /**
         * 
    @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         
    */
        
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType(
    "text/html;charset=UTF-8");
            PrintWriter pw 
    = response.getWriter();
            String wxMsgXml 
    = IOUtils.toString(request.getInputStream(),"utf-8");
            WeChatTextMessage textMsg 
    = null;
            
    try {
                textMsg 
    = getWeChatTextMessage(wxMsgXml);
            } 
    catch (Exception e) {
                e.printStackTrace();
            }
            StringBuffer replyMsg 
    = new StringBuffer();
            
    if(textMsg != null){
                
    //增加你所需要的處理邏輯,這里只是簡單重復消息
                replyMsg.append("您給我的消息是:");
                replyMsg.append(textMsg.getContent());
            }
            
    else{
                replyMsg.append(
    ":)不是文本的消息,我暫時看不懂");
            }
            String returnXml 
    = getReplyTextMessage(replyMsg.toString(), textMsg.getFromUserName());
            pw.println(returnXml);
        }
        
        
    private WeChatTextMessage getWeChatTextMessage(String xml){
            XStream xstream 
    = new XStream(new DomDriver());
            xstream.alias(
    "xml", WeChatTextMessage.class);
            xstream.aliasField(
    "ToUserName", WeChatTextMessage.class"toUserName");
            xstream.aliasField(
    "FromUserName", WeChatTextMessage.class"fromUserName");
            xstream.aliasField(
    "CreateTime", WeChatTextMessage.class"createTime");
            xstream.aliasField(
    "MsgType", WeChatTextMessage.class"messageType");
            xstream.aliasField(
    "Content", WeChatTextMessage.class"content");
            xstream.aliasField(
    "MsgId", WeChatTextMessage.class"msgId");
            WeChatTextMessage wechatTextMessage 
    = (WeChatTextMessage)xstream.fromXML(xml); 
            
    return wechatTextMessage;
        }
        
        
    private String getReplyTextMessage(String content, String weChatUser){
            WeChatReplyTextMessage we 
    = new WeChatReplyTextMessage();
            we.setMessageType(
    "text");
            we.setFuncFlag(
    "0");
            we.setCreateTime(
    new Long(new Date().getTime()).toString());
            we.setContent(content);
            we.setToUserName(weChatUser);
            we.setFromUserName(
    "shanghaiweather");//TODO 你的公眾帳號微信號
            XStream xstream = new XStream(new DomDriver()); 
            xstream.alias(
    "xml", WeChatReplyTextMessage.class);
            xstream.aliasField(
    "ToUserName", WeChatReplyTextMessage.class"toUserName");
            xstream.aliasField(
    "FromUserName", WeChatReplyTextMessage.class"fromUserName");
            xstream.aliasField(
    "CreateTime", WeChatReplyTextMessage.class"createTime");
            xstream.aliasField(
    "MsgType", WeChatReplyTextMessage.class"messageType");
            xstream.aliasField(
    "Content", WeChatReplyTextMessage.class"content");
            xstream.aliasField(
    "FuncFlag", WeChatReplyTextMessage.class"funcFlag");
            String xml 
    =xstream.toXML(we);
            
    return xml;
        }

    }

    原創文章,轉載請注明: 轉載自http://www.qiyadeng.com/

    本文鏈接地址: 微信公眾平臺開發(二)–簡單的聊天機器人

    posted @ 2013-03-17 20:41 qiyadeng 閱讀(15214) | 評論 (4)編輯 收藏

      開始微信公眾平臺的開發,我們首先要了解微信平臺可以幫助我們做哪些事情?
    使用您的公眾賬號登陸http://mp.weixin.qq.com/,選擇菜單--高級功能-開發模式--查看文檔,即能看到微信公眾平臺目前所能開發的功能。

    一、通訊機制


    公眾平臺的主要內容是

    • 接受用戶發送給您公眾賬號的消息
    • 給您的用戶回復消息

    需要特別說明的是,發送消息和回復消失是一個連貫的過程,只能在一個對話中完成。也就是說您的用戶不找您說話,您是不能主動發送消息給你的客戶(群發是另外一種情況,有次數限制。你也可以申請付費使用微信CRM平臺)。所有的發送消息和接受消息,都需要微信平臺進行中轉。

    二、消息類型

    下面介紹用戶能給您發送的消息類型,也就是目前接受到的消息類型。

    1.接受消息類型

      1.1文本消息

      這也是我們平時碰到最多的,可以根據文本中提到的一些關鍵字,進行判斷,判斷用戶的含義,并進行回復。

      1.2圖片消息

      目前通過圖片理解用戶想表達的意思,還是有較大難度,因此多數的公眾賬號,會選擇忽略圖片信息或選擇由人工來處理。只能說一句:圖片很美,但是我看不懂。

      1.3地理位置消息

      用戶把他的位置發給您,這對大多數公眾賬號來說,是一個重要的信息。可以提供一些基于位置信息的服務,比如酒店預訂公眾賬號,可以給你推薦你周邊的酒店。 另外一個補充是,可以在文本消息中分析出位置信息,并加以利用。比如用戶輸入“南京路步行街”,可以提供用戶南京路步行街的相關商戶。

      1.4鏈接消息

      目前還沒有看到開發模式中特別有效的使用方法。使用比較多的可能會是購物時或是咨詢時,對所談論的對象進行明確。

      1.5事件推送消息

      當用戶進入到和你對話的過程中,可以先和用戶打招呼等。這個消息目前只支持4.5版本,且暫時還沒有開發。后續可想想的空間很大,比如用戶進入到會話之后,搖一搖會發生什么呢?

    2.回復消息類型

      2.1文本消息
       這是我們平時發送最多的一類消息,當只需要簡單的文字即可回答用戶的消息時,可用文本消息。文本消息中可以帶有鏈接地址。

       2.2圖文消息
        圖文消息,這是我們在推送消息中經常看到的消息格式。每項內容可以點擊查看更詳細信息(當然你也可以把鏈接設置為空,使其不能跳轉)

       2.3音樂消息
       在你的答復中給用戶一個語音消息或是音樂,可以獲得不少用戶的親睞。
    了解了公眾平臺的通訊機制和消息類型,接下來,我們開始準備開發環境了。

    原創文章,轉載請注明: 轉載自http://www.qiyadeng.com/

    本文鏈接地址: 微信公眾平臺開發(一)

    posted @ 2013-03-17 20:36 qiyadeng 閱讀(34561) | 評論 (12)編輯 收藏

    在類似PHP的項目中,經常會碰到項目開發目錄和運行目錄不是一個目錄的情況。

    在window7下面有一個非常好的工具,可以做到自動同步。

    如:

     

    mklink /J D:\wamp\www\shanghaisales C:\Users\Admin\git\ShanghaiSales\ShanghaiSales

     

     

    原創文章,轉載請注明: 轉載自http://www.qiyadeng.com/

    本文鏈接地址: Window7自動目錄同步(mklink)

    posted @ 2013-03-13 20:49 qiyadeng 閱讀(1407) | 評論 (1)編輯 收藏

    本文中演示如何通過URLConnection獲取Http響應Header信息

    1.從響應中獲得Header信息

                    
                    URL obj = new URL("http://www.qiyadeng.com");
                    URLConnection conn 
    = obj.openConnection();
                    Map
    <String, List<String>> map = conn.getHeaderFields();
     

    2.從響應Header中獲取Server信息

     
                   Map<String, List<String>> map = conn.getHeaderFields();
                    List
    <String> server = map.get("Server");
     

    完整的示例

    package com.qiyadeng.http;

    import java.net.URL;
    import java.net.URLConnection;
    import java.util.List;
    import java.util.Map;
     
    public class GetHttpResponseHeader {
     
      
    public static void main(String[] args) {
     
            
    try {
     
                    URL obj 
    = new URL("http://www.qiyadeng.com");
                    URLConnection conn 
    = obj.openConnection();
                    Map
    <String, List<String>> map = conn.getHeaderFields();
     
                    System.out.println(
    "顯示響應Header信息\n");
     
                    
    for (Map.Entry<String, List<String>> entry : map.entrySet()) {
                            System.out.println(
    "Key : " + entry.getKey() + 
                                               
    " ,Value : " + entry.getValue());
                    }
     
                    System.out.println(
    "\n使用key獲得響應Header信息 \n");
                    List
    <String> server = map.get("Server");
     
                    
    if (server == null) {
                            System.out.println(
    "Key 'Server' is not found!");
                    } 
    else {
                            
    for (String values : server) {
                                    System.out.println(values);
                            }
                    }
     
            } 
    catch (Exception e) {
                    e.printStackTrace();
            }
     
      }
     
    }
     

    輸出

    顯示響應Header信息...

    Key : null ,Value : [HTTP/1.1 200 OK]
    Key : X
    -Pingback ,Value : [http://www.qiyadeng.com/xmlrpc.php]
    Key : Date ,Value : [Sun, 10 Mar 2013 12:16:26 GMT]
    Key : Transfer
    -Encoding ,Value : [chunked]
    Key : Connection ,Value : [close]
    Key : Content
    -Type ,Value : [text/html; charset=UTF-8]
    Key : Server ,Value : [Apache
    /2.2.3 (CentOS)]
    Key : X
    -Powered-By ,Value : [PHP/5.2.17]
    使用key獲得響應Header信息 ...

    Apache/2.2.3 (CentOS)




    原創文章,轉載請注明: 轉載自http://www.qiyadeng.com/

    本文鏈接地址: Java獲取Http響應Header信息

    posted @ 2013-03-12 21:40 qiyadeng 閱讀(11185) | 評論 (3)編輯 收藏

    在.net中也有非常多的日志工具,今天介紹下NLog。NLog特別好的地方就是和Vs(Visual Studio)開發環境的集成。

    只需下載(下載地址)安裝包,安裝之后NLog就會在VS的新建項中增加很多選項,并且在編輯NLog配置文件時也會提供智能提示和校驗。

    NLog工作主要依賴的是兩個文件一個是NLog.dll,另外一個是NLog.config,解下來演示下如何引入和進行配置

    1.在你的項目中加入NLog。右擊項目,選擇添加新項目,選擇Empty NLog Configuration,并選擇添加(如圖)。

    vs add new item

    (說明:有可能不像官網上說的在NLog的目錄下面,在ASP.net Web項目中,會在VB的目錄中。)

    在非Asp.net項目中,記得把NLog.config文件復制到輸出目錄(右擊NLog.config文件屬性)。

    2.編輯配置文件NLog.config.

    關于配置文件如何編輯有大量的篇幅(https://github.com/nlog/nlog/wiki/Configuration-file),我們這里介紹兩種常用的場景。

    A)在Vs的輸出窗口輸出日志,關于這些變量的說明${},請參看文檔Configuration Reference。(https://github.com/nlog/nlog/wiki)

     <target name="debugger" xsi:type="Debugger" layout="${logger}::${message}" />
    

    B)以文件形式輸出。

    <target name="file" xsi:type="File" maxArchiveFiles="30"

                layout
    ="${longdate} ${logger} ${message}"

                fileName
    ="${basedir}/logs/log${shortdate}.txt"

                keepFileOpen
    ="false" />

    完整的配置文件例子:

    <?xml version="1.0" encoding="utf-8" ?>

    <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"

          xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"  throwExceptions="true" internalLogFile="d:\internal_log_file.txt" internalLogLevel="Trace" internalLogToConsole="true">

      <targets>

        <target name="debugger" xsi:type="Debugger" layout="${logger}::${message}" />

     

        <target name="file" xsi:type="File" maxArchiveFiles="30"

                layout
    ="${longdate} ${logger} ${message}"

                fileName
    ="${basedir}/logs/log${shortdate}.txt"

                keepFileOpen
    ="false" />

      </targets>

     

      <rules>

        <logger name="*" minlevel="Trace" writeTo="debugger" />

        <logger name="*" minlevel="Trace" writeTo="file" />

      </rules>

    </nlog>

    3.在程序中使用NLog

    在程序中使用就特別簡單了,和大多數日志工具類似。

    using NLog;
    namespace MyNamespace
    {
      public class MyClass
      {
        private static Logger logger = LogManager.GetCurrentClassLogger();
      }
    }

    posted @ 2013-02-27 16:00 qiyadeng 閱讀(5081) | 評論 (2)編輯 收藏

    本文演示如何使用Collections.frequency和Map來計算重復項出現的次數。(Collections.frequency在JDK 1.5版本以后支持)

    package com.qiyadeng.core;
     
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeMap;
     
    public class CountDuplicatedList {
     
        
    public static void main(String[] args) {
     
            List list 
    = new ArrayList();
            list.add(
    "a");
            list.add(
    "b");
            list.add(
    "c");
            list.add(
    "d");
            list.add(
    "b");
            list.add(
    "c");
            list.add(
    "a");
            list.add(
    "a");
            list.add(
    "a");
     
            System.out.println(
    "\n例子1 - 計算'a'出現的次數");
            System.out.println(
    "a : " + Collections.frequency(list, "a"));
     
            System.out.println(
    "\n例子2 - 計算所有對象出現的次數");
            Set uniqueSet 
    = new HashSet(list);
            
    for (String temp : uniqueSet) {
                System.out.println(temp 
    + "" + Collections.frequency(list, temp));
            }
     
            System.out.println(
    "\n例子3 -用Map來計算對象出現的次數");
            Map map 
    = new HashMap();
     
            
    for (String temp : list) {
                Integer count 
    = map.get(temp);
                map.put(temp, (count 
    == null? 1 : count + 1);
            }
            printMap(map);
     
            System.out.println(
    "\nMap排序-以key排序");
            Map treeMap 
    = new TreeMap(map);
            printMap(treeMap);
     
        }
     
        
    public static void printMap(Map map) {
            
    for (Map.Entry entry : map.entrySet()) {
                System.out.println(
    "Key-value : " + entry.getKey() + ""
                        
    + entry.getValue());
            }
        }
    }

    輸出結果
    例子1 - 計算'a'出現的次數
    a : 
    4
    例子2 
    - 計算所有對象出現的次數
    d: 
    1
    b: 
    2
    c: 
    2
    a: 
    4
    例子3 
    -用Map來計算對象出現的次數
    Key
    -value : d- 1
    Key
    -value : b- 2
    Key
    -value : c- 2
    Key
    -value : a- 4
    Map排序
    -以key排序
    Key
    -value : a- 4
    Key
    -value : b- 2
    Key
    -value : c- 2
    Key
    -value : d- 1

    原創文章,轉載請注明: 轉載自http://www.qiyadeng.com/

    本文鏈接地址: 計算Java List中的重復項出現次數

    posted @ 2013-02-25 22:44 qiyadeng 閱讀(3585) | 評論 (0)編輯 收藏

    抓緊年前的兩天時間,自己開發了一個微信天氣預報的自定義接口。做微信公眾平臺的開發已經不是第一次,這也算是自娛自樂,第一個版本不需要太注重外觀,主要注重天氣信息。
    微信號(shanghaiweather):上海天氣預報- 2692296679

    image

    原創文章,轉載請注明: 轉載自http://www.qiyadeng.com/

    本文鏈接地址: 微信公眾平臺-天氣預報

    posted @ 2013-02-25 13:12 qiyadeng 閱讀(1281) | 評論 (0)編輯 收藏

    僅列出標題
    共9頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 
    主站蜘蛛池模板: 亚洲精品无码国产片| 日韩视频在线精品视频免费观看| 亚洲国产成人精品激情| 亚洲乱码精品久久久久..| 午夜色a大片在线观看免费| 99热在线观看免费| 一级毛片免费毛片毛片| 亚洲日韩乱码中文字幕| 中文字幕亚洲精品资源网| 亚洲区小说区图片区| 在线观看免费毛片| 18禁美女黄网站色大片免费观看 | xxxxx做受大片视频免费| 亚洲一区二区三区乱码在线欧洲| 亚洲AV无码不卡在线播放| 久久久久久A亚洲欧洲AV冫| 国产小视频在线免费| 成人a视频片在线观看免费| 四虎成年永久免费网站| 午夜视频在线免费观看| 97人妻精品全国免费视频| 国产精品午夜免费观看网站| 精品韩国亚洲av无码不卡区| 亚洲人成欧美中文字幕| 亚洲色欲啪啪久久WWW综合网| 亚洲a级片在线观看| 亚洲卡一卡2卡三卡4麻豆| 亚洲精品白色在线发布| 亚洲综合久久1区2区3区| 中文字幕亚洲精品资源网| 亚洲精品亚洲人成在线观看麻豆| 久久久久亚洲av无码尤物| 久久精品视频亚洲| 久久精品国产亚洲沈樵| 精品亚洲一区二区| 亚洲av色影在线| 久久久亚洲AV波多野结衣 | 91嫩草免费国产永久入口| 91精品免费不卡在线观看| 免费看又黄又无码的网站| 51在线视频免费观看视频|