java連線Ubuntu、windows FTP伺服器獲取檔案
阿新 • • 發佈:2021-10-09
1、前言
socket資料傳輸不滿足大資料的傳輸,採用ftp方式傳輸pcm檔案
2、pom
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
</dependency>
3、windows程式碼
import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import java.io.*; public class FTPConnectWindowsTest { private static String username = "ftpuser"; private static String password = "123456"; private static String ip = "192.168.1.19"; private static Integer port = 21; public static void start() { String saveDir = "F:/Program/FTP_Save"; //下載遠端資料夾下的 中文 檔案 String remoteFileName = "/1/津巴多普通心理學.pdf"; String fileName = "津巴多普通心理學.pdf"; // remoteFileName = "/1/2/654321.pcm"; // fileName = "654321.pcm"; downloadFtpFile(remoteFileName, saveDir, fileName); } public static void downloadFtpFile(String remoteFileName, String saveDir, String fileName) { FTPClient ftpClient = new FTPClient(); int reply; try { ftpClient.connect(ip, port); ftpClient.login(username, password); reply = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftpClient.disconnect(); return; } ftpClient.setControlEncoding("UTF-8"); ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); File localFile = new File(saveDir + File.separatorChar + fileName); OutputStream os = new FileOutputStream(localFile); //ftp中文名需要iso-8859-1字元 boolean flag2 = ftpClient.retrieveFile(new String(remoteFileName.getBytes("GBK"), "iso-8859-1"), os); if (!flag2) { System.out.println("沒有找到" + remoteFileName + "---該檔案"); localFile.delete(); } else { System.out.println("=================== Windows save success"); } os.close(); ftpClient.logout(); ftpClient.disconnect(); } catch (Exception e) { e.printStackTrace(); } } }
4、Ubuntu程式碼
import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; public class FTPConnectUbuntuTest { private static String username = "bjlthy"; private static String password = "xxxxx"; private static String ip = "192.168.1.90"; private static Integer port = 21; public static void start() { String saveDir = "F:/Program/FTP_Save"; //下載遠端資料夾下的 中文 檔案 String remoteFileName = "1234567.pdf"; remoteFileName = "./3/1234567.pdf"; String fileName = "津巴多普通心理學.pdf"; downloadFtpFile(remoteFileName, saveDir, fileName); } public static void downloadFtpFile(String remoteFileName, String saveDir, String fileName) { FTPClient ftpClient = new FTPClient(); int reply; try { ftpClient.connect(ip, port); ftpClient.login(username, password); reply = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { System.out.println("=================== connect fail"); ftpClient.disconnect(); return; } ftpClient.setControlEncoding("UTF-8"); ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); File localFile = new File(saveDir + File.separatorChar + fileName); OutputStream os = new FileOutputStream(localFile); //ftp中文名需要iso-8859-1字元 boolean flag2 = ftpClient.retrieveFile(new String(remoteFileName.getBytes("GBK"), "iso-8859-1"), os); if (!flag2) { System.out.println("沒有找到" + remoteFileName + "---該檔案"); localFile.delete(); } else { System.out.println("=================== ubuntu save success"); } os.close(); ftpClient.logout(); ftpClient.disconnect(); } catch (Exception e) { e.printStackTrace(); } } }