天天看點

Java實作FTP檔案上傳下載下傳

Java實作FTP檔案上傳下載下傳

在Java中使用FTP技術實作上傳檔案到檔案伺服器或者從檔案伺服器上拉取檔案到本地

采用 apache commons-net工具包實作

maven pom.xml導入依賴

<!-- apache commons-net 工具包  -->
<dependency>
	<groupId>commons-net</groupId>
	<artifactId>commons-net</artifactId>
	<version>3.6</version>
</dependency>
           

FTP檔案上傳

上傳檔案到FTP檔案伺服器上

/**
 * @Description: 上傳檔案到FTP伺服器
 * @author TianwYam
 * @date: 2021年3月30日 
 * @param filePath 需要上傳的檔案路徑
 * @param fileName 需要上傳的檔案名稱
 */
public static boolean sendFile2FTP(String filePath, String fileName) {
    // 建立 FTP連接配接
    FTPClient ftpClient = new FTPClient();
    try(
        // 讀取需要上傳的檔案
        FileInputStream fis = 
        	new FileInputStream(new File(filePath + File.separator + fileName));){

        // 連接配接FTP伺服器
        ftpClient.connect(FTP_SERVER_IP, FTP_SERVER_PORT);
        // 登陸FTP伺服器
        ftpClient.login(FTP_USERNAME, FTP_PASSWORD);
        // 設定上傳目錄(FTP檔案伺服器上的存放檔案的目錄)
        ftpClient.changeWorkingDirectory(FTP_FILE_PATH);
        // 設定緩存大小
        ftpClient.setBufferSize(1024);
        // 設定編碼
        ftpClient.setControlEncoding("UTF-8");
        // 設定上傳檔案格式 二進制格式
        ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
        // 上傳檔案、存儲檔案到FTP伺服器
        ftpClient.storeFile(fileName, fis);
        // 上傳成功
        return true;
    }catch (Exception e) {
        log.error("上傳檔案【{}】到FTP伺服器發生異常:", fileName,  e);
    }finally {
        try {
            if(ftpClient != null){
                ftpClient.disconnect();
            }
        } catch (IOException e) {
            log.error("關閉FTP伺服器連接配接發生異常", e);
        }
    }

    return false;
}


           

FTP檔案下載下傳

從FTP檔案伺服器中下載下傳同字尾類型的檔案到本地,并傳回下載下傳的檔案路徑

/**
 * @Description: 從FTP伺服器中擷取檔案
 * @author TianwYam
 * @date: 2021年3月30日 
 * @param filePath 擷取後的檔案存放目錄
 * @param remoteFileSuffix FTP伺服器中的檔案字尾,傳回同類型檔案
 * @return 存放傳回的檔案路徑
 */
public static List<String> getFileFromFTP(String filePath, String remoteFileSuffix) {
	
	// 存放傳回的檔案路徑
	List<String> retFilePathList =  new ArrayList<>();
	// 建立 FTP 連接配接
	FTPClient ftpClient = new FTPClient();
	try {
		// 建立目錄(本地存放檔案的路徑,若是不存在,則建立)
		mkdir(filePath);
		
		// 連接配接FTP伺服器
		ftpClient.connect(FTP_SERVER_IP, FTP_SERVER_PORT);
		// 登陸FTP伺服器
		ftpClient.login(FTP_USERNAME, FTP_PASSWORD);
		
		// 設定緩存大小
		ftpClient.setBufferSize(1024);
		// 設定編碼
		ftpClient.setControlEncoding("UTF-8");
		// 設定檔案格式 二進制格式
		ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
		
		// 切換到 遠端下載下傳目錄檔案下(FTP檔案伺服器上的存放檔案的目錄)
		ftpClient.changeWorkingDirectory(FTP_FILE_PATH);
		
		// 擷取 FTP檔案伺服器上的 檔案清單
		FTPFile[] listFiles = ftpClient.listFiles(FTP_FILE_PATH, new FTPFileFilter() {
			@Override
			public boolean accept(FTPFile ftpFile) {
				// 檔案名
				String name = ftpFile.getName();
				// 字尾
				String suffix = FilenameUtils.getExtension(name);
                // 擷取相同類型的檔案
				return Objects.equals(suffix, remoteFileSuffix) ;
			}
		});
		
		// 下載下傳多個檔案
		for (FTPFile ftpFile : listFiles) {
			String name = ftpFile.getName();
            // 儲存到本地的 檔案全路徑
			String outFilePath = filePath + File.separator + name;
			log.info("從FTP伺服器下載下傳檔案:{} 到:{}", name, outFilePath);
			try(
				// 擷取後的檔案存放目錄
				FileOutputStream fos = new FileOutputStream(new File(outFilePath));){
				// 從FTP伺服器中擷取 檔案 到輸出流
				ftpClient.retrieveFile(name, fos);
				// 從FTP伺服器中删除檔案
				ftpClient.deleteFile(name);
				// 重新整理輸出緩沖
				fos.flush();
				// 把檔案路徑傳回
				retFilePathList.add(outFilePath);
			}catch (Exception e) {
				log.error("從FTP伺服器中擷取檔案【{}】發生異常:", name,  e);
			}
		}
		
	}catch (Exception e) {
		log.error("從FTP伺服器中擷取檔案類型【{}】發生異常:", remoteFileSuffix,  e);
	}finally {
		try {
            if(ftpClient != null){
            	ftpClient.disconnect();
            }
		} catch (IOException e) {
			log.error("關閉FTP伺服器連接配接發生異常", e);
		}
	}
	
	return retFilePathList ;
}
	
           

剛開始寫微信公衆号,請多多關注,歡迎,多謝!

微信公衆号:《Java學習積累》

Java實作FTP檔案上傳下載下傳