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

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

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

    隨筆 - 117  文章 - 72  trackbacks - 0

    聲明:原創作品(標有[原]字樣)轉載時請注明出處,謝謝。

    常用鏈接

    常用設置
    常用軟件
    常用命令
     

    訂閱

    訂閱

    留言簿(7)

    隨筆分類(130)

    隨筆檔案(123)

    搜索

    •  

    積分與排名

    • 積分 - 156642
    • 排名 - 390

    最新評論

        搬到blogjava總得發點原創的東西吧。
        CodeHelp是專門為我們程序員設計的一款源代碼管理軟件。它能方便的管理您在編程和學習中有用的源代碼,減少經常到處查找資料的勞動,節省您在開發中的時間和精力。這個軟件不錯,如果沒有用過請到這里下載(http://www.nulldo.com/)。用了一段時間,發現它并沒有文件導出功能。于是用Java寫了一個CodeHelpExporter。
        下圖為CodeHelp數據庫表的關系,是用Visio導入Access反向分析得來的。有了這個圖我們就可以編程了。


    CodeHelpExporter.java源代碼如下:
    import java.sql.*;
    import java.io.*;
    /*
     *將CodeHelp數據庫中的文件導出
     *@version 2009-3-15
     *@author Winty (wintys@gmail.com)
     */
    class CodeHelpExporter{
        Database db;//數據庫連接對象

        public CodeHelpExporter(String dbPath){
            db = new Database(dbPath);
            try{
                db.connect();
            }catch(SQLException sqle){
                sqle.printStackTrace();
            }
        }

        /**
         *主函數
         */
        public static void main(String[] args){
            String dbq = "helpdb.mdb";
            CodeHelpExporter exporter = new CodeHelpExporter( dbq );
            exporter.export();
        }

        /**
         *按CodeHelp的目錄結構導出文章及其附件。
         *但有一點不同,就是不含任何內容的目錄不會被創建。
         *文章會被導出到當前目錄的CodeHelpExportedFiles目錄下。
         */
        public void export(){
            try{
                String sql;
                sql = "SELECT T.NodeId AS id , T.ParentId AS parent ,";
                sql +="T.Type AS type,T.Title AS title , C.Content AS content ";
                sql +="FROM TContent C, TTree T WHERE T.NodeId = C.NodeId ";
                ResultSet rs = db.query(sql);

                while(rs.next()){
                    int type = rs.getInt("type");
                    if(type == 0)//如果是目錄,則無操作
                        continue;

                    int parent = rs.getInt("parent");
                    int id = rs.getInt("id");
                    String title = rs.getString("title");

                    File fullParentPath = null;
                    fullParentPath = parentPath(parent , "");
                    fullParentPath = new File("CodeHelpExportedFiles/" +
                                                            fullParentPath.toString() );
                   
                    //讀取附件的SQL
                    String sql2 = "SELECT A.Title AS title , A.Data AS data ";
                    sql2 += "FROM TAttachment A WHERE A.NodeId = " + id;
                    ResultSet rs2=db.query(sql2);

                    //判斷文章有沒有附件
                    //如果文章沒有附件則不創建目錄,即文章不包含在目錄中
                    rs2.last();
                    int num = rs2.getRow();
                    String article;
                    if(num > 0){
                        article = title + "/" ;
                    }
                    else{
                        article = "";
                    }
                    fullParentPath = new File(fullParentPath , article);
                    if(!fullParentPath.exists())
                        fullParentPath.mkdirs();
                       
                    //讀取文章
                    InputStream input = rs.getAsciiStream("content");
                    readDataToFile(new File(fullParentPath ,  title + ".txt") , input);

                    //讀取文章的附件
                    rs2.beforeFirst();
                    while(rs2.next()){
                        String attachmentName = rs2.getString("title");
                        InputStream data = rs2.getBinaryStream("Data");
                        //將附件與其文章一同放在以文章名為目錄名的目錄中
                        readDataToFile(new File(fullParentPath , attachmentName) ,
                                                data);
                    }
                    rs2.close();
                }
                rs.close();

            }catch(Exception e){
                e.printStackTrace();
            }finally{
                try{
                    db.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }

        /**
         *從數據流中讀取數據到文件
         *@param fileName 輸出文件的文件名
         *@param input 數據輸入流
         */
        private void readDataToFile(File filePath , InputStream input)
            throws IOException{
            FileOutputStream file = new FileOutputStream(filePath);
            BufferedOutputStream output = new BufferedOutputStream(file);

            byte[] buf = new byte[1024];
            int len;
            while((len = input.read(buf))!=-1){
                output.write(buf , 0 , len);
            }

            input.close();
            output.close();
        }

        /**
         *遞歸地構造目錄(如果父目錄存在的話)。即如果是子目錄,則一直找到根目錄才返回。
         *@param parent 父目錄的ParentId
         *@param title 文件自身目錄名,對于文章而言,path總是傳入空字符串。
         *@return 返回構造后的目錄(含從根目錄一直到子目錄的各級目錄)
         */
        private File parentPath(int parent , String path)
            throws IOException , SQLException{
          
            if(parent == 0){//根目錄
                File dir = new File(path);
                return dir;
            }
            else{
                String sql = "SELECT Title , ParentId  FROM TTree ";
                sql += "WHERE NodeId=" + parent;
                ResultSet rs = db.query(sql);
               
                if(rs.next()){
                    String nodeTitle = rs.getString("Title");
                    int nodeParent = rs.getInt("ParentId");
                    path = nodeTitle + "/" + path;

                    return parentPath(nodeParent , path);
                }
                rs.close();
            }

            return null;///
        }
    }

    Database.java:
    import java.sql.*;
    import java.io.*;

    /**
     *數據庫操作類,當前只適用于Access數據庫。
     *@version 2009-3-15
     *@author wintys@gmail.com
     */
    class Database{
        private Connection conn = null;
        private String dbPath = null;

        /**
         *構造方法
         *@param databasePath Access數據庫的路徑
         */
        public Database(String databasePath){
            dbPath = databasePath;
        }

        /**
         *連接數據庫
         *@return 返回一個數據庫連接Connection,如果連接數據庫失敗,返回null。
         */
        public Connection connect()
            throws SQLException{

            if(conn!=null)
                return conn;
           
            if(dbPath==null || dbPath.equals("")){
                conn = null;
                throw new SQLException("數據庫路徑錯誤!");
            }
           
            String url;
            //Microsoft Access數據庫連接字符串
            url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=";
            url += dbPath;
           
            try{
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            }catch(ClassNotFoundException e){
                e.printStackTrace();
            }
            conn = DriverManager.getConnection(url , "" , "");
           

            return conn;
        }

        /**
         *關閉數據庫連接
         */
        public void close() throws SQLException{
            if(conn!=null)
                conn.close();
        }

        /**
         *執行查詢,調用者要負責關閉結果集。
         *@param sql 要執行的SQL查詢語句
         *@return 返回查詢結果集
         */
        public ResultSet query(String sql) throws SQLException{
            Statement stmt;
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE ,
                                                          ResultSet.CONCUR_UPDATABLE);
            ResultSet rs = stmt.executeQuery(sql);

            return rs;
        }
    }

    posted on 2009-03-16 17:05 天堂露珠 閱讀(1077) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 中文字幕亚洲精品资源网| 77777亚洲午夜久久多人| 亚洲精品二三区伊人久久| 国色精品va在线观看免费视频| 亚洲第一区在线观看| 免费一级毛suv好看的国产网站| 又黄又爽的视频免费看| 国产一区二区三区亚洲综合| 丁香花免费完整高清观看| 亚洲一级黄色大片| 永久免费的网站在线观看| 亚洲欧美日韩中文字幕在线一区| 成年在线观看免费人视频草莓| 亚洲中文无码永久免| 女人隐私秘视频黄www免费| 亚洲国产综合精品中文字幕| 丰满人妻一区二区三区免费视频| 中文亚洲AV片在线观看不卡| 性无码免费一区二区三区在线| 久久国产亚洲精品无码| 久久久高清免费视频| 亚洲GV天堂GV无码男同| 亚洲午夜爱爱香蕉片| 13小箩利洗澡无码视频网站免费| 亚洲伊人久久大香线蕉苏妲己| 一级女人18毛片免费| 最新亚洲人成无码网站| 亚洲人成人网站色www| 久久久久久精品成人免费图片| 亚洲欧美自偷自拍另类视| 亚洲精品成人网久久久久久| 亚欧日韩毛片在线看免费网站| 亚洲一区精彩视频| 国产偷国产偷亚洲高清日韩| 99热这里只有精品6免费| 色天使亚洲综合一区二区| 久久久久久a亚洲欧洲aⅴ| 啦啦啦中文在线观看电视剧免费版 | 午夜无遮挡羞羞漫画免费| 男女猛烈激情xx00免费视频| 亚洲国产精品热久久|