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 閱讀(7559) | 評論 (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 閱讀(2203) | 評論 (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 閱讀(2986) | 評論 (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 閱讀(15225) | 評論 (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 閱讀(34568) | 評論 (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 閱讀(1412) | 評論 (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 閱讀(11194) | 評論 (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 閱讀(5089) | 評論 (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 閱讀(3590) | 評論 (0)編輯 收藏

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

          image

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

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

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

          僅列出標題
          共9頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 
          主站蜘蛛池模板: 甘谷县| 兖州市| 无极县| 宣武区| 南部县| 阿克陶县| 梁河县| 长葛市| 扬州市| 大名县| 天门市| 襄城县| 拜城县| 缙云县| 东至县| 长垣县| 娄底市| 襄汾县| 柳河县| 中西区| 广宁县| 兰西县| 南郑县| 枞阳县| 曲靖市| 崇义县| 密山市| 灵宝市| 怀安县| 英德市| 阿克陶县| 霍邱县| 来凤县| 甘洛县| 呼图壁县| 肇东市| 肇源县| 大田县| 启东市| 沂源县| 章丘市|