1. 程式人生 > >java ftp下載檔案

java ftp下載檔案

public void readFire(FireFtpConfig ftpConfig) {
        FTPClient ftpClient = new FTPClient();
        Date now = new Date();
        try {
            log.debug("登入ftp:{}", ftpConfig.getHost());
            ftpClient.connect(ftpConfig.getHost(), ftpConfig.getPort());
            ftpClient.login(ftpConfig.getUsername(), ftpConfig.getPassword());
            ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true));
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            ftpClient.setControlEncoding("UTF-8");
            ftpClient.enterLocalPassiveMode();
            log.debug("登入成功");
            String dir = DatePatternUtil.get("20180925").format(now);
            // String rootPath = ftpConfig.getDirpath() + dir;
            String rootPath = ftpConfig.getDirpath() + "20181000";
            String[] files = ftpClient.listNames(rootPath);
            List<String> dataNameList = FirePointReadUtil.readFilePath(ftpClient, rootPath);
            for (String dataName : dataNameList) {
                InputStream inputStream = ftpClient.retrieveFileStream(dataName);
                if (dataName.endsWith(".csv") && inputStream != null) {
                    readFtp(inputStream, now, "csv");
                } else if (dataName.endsWith(".rar") && inputStream != null) {
                    readFtp(inputStream, now, "rar");
                }
                //這裡需要注意,如果不寫下面兩部,則再次讀取得流為null
                inputStream.close();
                ftpClient.completePendingCommand();
            }
        } catch (IOException e) {
            log.error("讀取檔案是發生錯誤", e);
        } finally {
            if (ftpClient.isConnected()) {
                try {
                    ftpClient.logout();
                    ftpClient.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

下面是遞迴獲取ftp的資料夾下所有檔案絕對路徑

private static List<String> readFilePath(FTPClient ftpClient, String path) throws IOException {
        List<String> paths = new ArrayList();
        for (FTPFile file : ftpClient.listFiles(path)) {
            if (file.isDirectory()) {
                paths.addAll(readFilePath(ftpClient, path + "/" + file.getName()));
            }
            if (file.isFile()) {
                paths.add(path + "/" + file.getName());
            }
        }
        return paths;
    }