根據項目需求,需要監測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.(沒有將文件讀入輸入流)
