讀取FTP上的excel文件,並寫入數據庫

 

 

   今天遇到一些問題,須要從ftp上讀取一些excel文件,並須要將excel中的數據寫入到數據庫,這樣就能夠經過管理頁面查看這些數據。java

    我將相關工做分爲三步,一、從ftp上讀取相關文件,並將excel文件下載到本地。二、讀取本地下載完成的excel,讀取相關信息 三、將讀取的信息存儲到數據庫中。數據庫

    一、獲取java操做ftp操做,首先要從maven倉庫https://mvnrepository.com/artifact/commons-net/commons-net 下載相應的jar包,apache commons net 提供了相應的接口。apache

 

/** * 獲取FTPClient對象 * * @param ftpHost * FTP主機服務器 * @param ftpPassword * FTP 登陸密碼 * @param ftpUserName * FTP登陸用戶名 * @param ftpPort * FTP端口 默認爲21 * @return
     */
    public static FTPClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort) { FTPClient ftpClient = new FTPClient(); try { ftpClient = new FTPClient(); ftpClient.connect(ftpHost, ftpPort);// 鏈接FTP服務器
        ftpClient.login(ftpUserName, ftpPassword);// 登錄FTP服務器
        if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { log.info("未鏈接到FTP,用戶名或密碼錯誤。"); ftpClient.disconnect(); } else { log.info("FTP鏈接成功。"); } } catch (SocketException e) { e.printStackTrace(); log.info("FTP的IP地址可能錯誤,請正確配置。"); } catch (IOException e) { e.printStackTrace(); log.info("FTP的端口錯誤,請正確配置。"); } return ftpClient; }
public static void main(String [] args) throws IOException { String ftp_ipadd = "127.0.0.1";//ftp 地址
    String ftp_user = "guest";//ftp 登陸賬號
    String ftp_passwd = "guest";//ftp 登陸賬號密碼
    int ftpport = 21;//ftp端口,默認爲21
 FTPClient ftpClient = this.getFTPClient(ftp_ipadd, ftp_user, ftp_passwd, ftpport); log.info(String.valueOf(ftpClient.getReplyCode())); ftpClient.setControlEncoding("UTF-8"); // 中文支持
    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//設置文件類型
    ftpClient.enterLocalPassiveMode();//設置ftp 模式,有被動模式和活動模式,這裏設置爲被動模式
    String datestr = DateUtil.getyesterdayStr();//獲取前一天的日期格式爲20180921
    ftpClient.changeWorkingDirectory("/data/" + datestr + "/JD/");//設置ftp文件所在的目錄
    FTPFile [] files = ftpClient.listFiles(); log.info(files.toString()); for (int i = 0; i < files.length; i++) { log.info(files[i].getName()); File localFile = new File("d:\\download\\" + datestr + "\\" + files[i].getName());//設置本地下載的目錄
        File fileparent = localFile.getParentFile();//本地下載目錄下的文件夾,若是不存在則建立
        if (!fileparent.exists()) { fileparent.mkdirs(); } OutputStream os = new FileOutputStream(localFile);//輸出到本地文件流
        ftpClient.retrieveFile(files[i].getName(), os);//下載文件到本地
 os.close(); } ftpClient.logout();//關閉ftp連接
    }

這裏只寫了demo 不作代碼優化了。服務器

二、讀取本地的excel文件,java讀取excel主要有兩種方式jxl 和 poi, jxl只能讀取2003之前的版本,但效率要高於poi,內存佔用率也相對低(這裏我也沒有驗證,導入量少基本沒感受),poi則提供了兩種方式分別支持2003和2007,HSSF方式支持2003,XSSF方式支持2007。這裏我使用jxl讀取xls結尾的文件,使用XSSF讀取xlsx結尾的文件。一樣若是想使用兩種方法都須要到maven倉庫下載相應的jar包。xss

/** * 讀取excel文件 * * @param args */
    public static void readExcel(File filePath) { String extString = filePath.getName().substring(filePath.getName().lastIndexOf("."));//讀取文件並判斷文件類型
 InputStream is = null; try { is = new FileInputStream(filePath); if (".xls".equals(extString)) { jxlExcel(filePath);//這裏執行jxl方法讀取excel
        } else if (".xlsx".equals(extString)) { xssfExcel(filePath);//這裏執行xssf方法讀取excel
 } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 使用jxl方式讀取excel 2003 * @param filePath */
    public static void jxlExcel(File filePath) { try { Workbook workbook = Workbook.getWorkbook(filePath); Sheet sheet = workbook.getSheet(0); int rowNums = sheet.getRows();// 獲取excel總行數
        int columns = sheet.getColumns(); for (int i = 1; i <= rowNums; i++) { for (int j = 0; j < columns; j++) { log.info(sheet.getCell(i, j).toString()); } } } catch (BiffException e) { // TODO Auto-generated catch block
 e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block
 e.printStackTrace(); } } public static void xssfExcel(File filePath) { try { XSSFWorkbook xssfworkbook = new XSSFWorkbook(new FileInputStream(filePath)); XSSFSheet xssfsheet = xssfworkbook.getSheetAt(0); int rowNums = xssfsheet.getLastRowNum();// 當前sheet總共有多少行
        int columns = xssfsheet.getRow(0).getPhysicalNumberOfCells();// 當前sheet總共有多少列

        for (int i = 1; i <= rowNums; i++) { Row row = xssfsheet.getRow(i); for (int j = 0; j < columns; j++) { log.info(row.getCell(j).toString()); } } } catch (FileNotFoundException e) { // TODO Auto-generated catch block
 e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block
 e.printStackTrace(); } }

三、存入數據庫,這裏就很少說了。maven

 

關於ftp下載和讀取excle其實也是常規的操做,只是須要 認真些就能夠,固然能夠把相關操做封裝爲util文件,使用的時候直接調用會更方便些。優化

相關文章
相關標籤/搜索