<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)

    搜索

    •  

    積分與排名

    • 積分 - 155667
    • 排名 - 391

    最新評論

        搬到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 天堂露珠 閱讀(1070) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 日本亚洲成高清一区二区三区 | 在线亚洲人成电影网站色www| 久久精品无码专区免费| 免费国产怡红院在线观看| 亚洲精品国产精品| 日本一道在线日本一道高清不卡免费 | 亚洲男人天堂影院| 亚洲精品第一国产综合亚AV| 免费下载成人电影| 2020亚洲男人天堂精品| 性感美女视频在线观看免费精品| 亚洲不卡中文字幕| 免费的涩涩视频在线播放| 亚洲AV无码一区二区三区电影 | 久久亚洲精品中文字幕| 1区2区3区产品乱码免费| 日韩亚洲国产高清免费视频| 好吊妞在线成人免费| 狠狠入ady亚洲精品| 亚洲国产香蕉人人爽成AV片久久| 亚洲欧洲尹人香蕉综合| 五月婷婷综合免费| 精品久久久久久亚洲中文字幕| 亚洲成a人在线看天堂无码| 亚洲伊人久久大香线蕉AV| 色吊丝最新永久免费观看网站| 美女扒开屁股让男人桶爽免费| 国产卡一卡二卡三免费入口| 亚洲国产精品自在自线观看| 亚洲AV无码之日韩精品| 国产精品白浆在线观看免费| 亚洲粉嫩美白在线| 不卡精品国产_亚洲人成在线| 色欲A∨无码蜜臀AV免费播| 亚洲人成色在线观看| 午夜色a大片在线观看免费| 男女猛烈无遮掩视频免费软件| 亚洲国产一成人久久精品| 国色精品卡一卡2卡3卡4卡免费| 深夜a级毛片免费视频| 亚洲精品在线观看视频|