使用SAXReader讀取ftp服務器上的xml文件(原創)


根據項目需求,需要監測ftp服務器上的文件變化情況,並將新添加的文件讀入項目系統(不需要下載)。

spring配置定時任務就不多說了,需要注意的一點就是,現在的項目很多都是通過maven構建的,分好多子項目,通過pom互相依賴,定時任務的配置文件需要放到tomcat等容器發布的工程下,而不要放到任務所在的子項目里面,bean的class屬性是可以通過項目依賴讀取到其他子項目里面的class的,而且任務類需要有構造方法,涉及到spring架構的bean的知識,說的有點多了。。。

==================================================================

下面進入正題-_-!

1、SAXReader類中的幾個read方法如圖:

FTP服務器上的文件都是FTPFile類型,read(File)方法必然不可用,至於可不可以將FTPFile轉換為File,沒有過多研究;使用read(URL)方法,URL填入文件對應的ftp地址時報錯(不可用的用戶名密碼),由於這不是用ftpclient去讀ftp文件,沒有登錄服務器,沒有權限是必然的,至於怎么用SAXReader登錄ftp服務器去讀取ftpFile,沒有過多研究。這兩方面以后有時間再回頭調查一下。

read(ImputStream)方法不管看起來還是用起來,都是可行的。。。

    /**
     * 解析xml文件,讀取xml中每個標簽內的信息
     * @param fPath ftp文件,例如:a.xml
     * @param eName xml標簽,例如:"//sciencereading_book:id"
     * @return xml標簽中的內容
     */
    public String parseXML(FTPFile fPath, String eName) {

        String rtn = "";
        Document document = null;
        InputStream ins = null;
        try {
            SAXReader saxreader = new SAXReader();
            ins = this.ftp.retrieveFileStream(fPath.getName());
            document = saxreader.read(ins);
            List list_1 = document.selectNodes(eName);
            for (Iterator iter = list_1.iterator(); iter.hasNext();) {
                Element element = (Element) iter.next();
                rtn = element.getText();
            }
            ftp.getReply();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        } finally {
            if(ins != null){
                try {
                    ins.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return rtn;
    }
}

特別說明:ftp.getReply(); 一定不能忘記,把接下來的226消費掉,如果沒有寫,下一次this.ftp.retrieveFileStream()返回的InputStream對象會一直為null!!!

log如下:

如果不寫,則只有     RETR B97870302061380003600.xml   \n    200 Port command successful.(沒有將文件讀入輸入流)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM