使用java commons net包中的api可以方便操作ftp操作。
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream;import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply;public class FtpCtrl {public static void main(String[] args) throws Exception {String url = "ip";int port = 21;String username = "username";String password = "password";String path = "/";String filename = "ftp.test.tmp";FileInputStream fis = new FileInputStream("/home/iamsuperman/ftp.txt");uploadFile(url, port, username, password, path, filename, fis);}/*** @param ip* FTP服務器IP地址* @param port* FTP服務器端口* @param username* FTP服務器登錄名* @param password* FTP服務器密碼* @param remotePath* 遠程文件路徑* @param fileName* 待刪除的文件名* @return* @see [類、類#方法、類#成員]*/public static boolean deleteFtpFile(String ip, int port, String username, String password, String remotePath,String fileName) {boolean success = false;FTPClient ftp = new FTPClient();try {int reply;// 連接FTP服務器if (port > -1) {ftp.connect(ip, port);} else {ftp.connect(ip);}// 登錄 ftp.login(username, password);reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();return success;}// 轉移到FTP服務器目錄 ftp.changeWorkingDirectory(remotePath);success = ftp.deleteFile(remotePath + "/" + fileName);ftp.logout();} catch (IOException e) {e.printStackTrace();success = false;} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException e) {e.printStackTrace();}}}return success;}/*** Description: 從FTP服務器下載文件* * @param ip* FTP服務器hostname* @param port* FTP服務器端口* @param username* FTP登錄賬號* @param password* FTP登錄密碼* @param remotePath* FTP服務器上的相對路徑* @param fileName* 要下載的文件名* @param localPath* 下載后保存到本地的路徑* @return*/public static boolean downloadFile(String ip, int port, String username, String password, String remotePath,String fileName, String localPath) {boolean success = false;FTPClient ftp = new FTPClient();try {int reply;// 連接FTP服務器if (port > -1) {ftp.connect(ip, port);} else {ftp.connect(ip);}ftp.login(username, password);// 登錄reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();return success;}ftp.changeWorkingDirectory(remotePath);// 轉移到FTP服務器目錄FTPFile[] fs = ftp.listFiles();for (FTPFile ff : fs) {if (ff.getName().equals(fileName)) {File localFile = new File(localPath + "/" + ff.getName());OutputStream is = new FileOutputStream(localFile);ftp.retrieveFile(ff.getName(), is);is.close();}}ftp.logout();success = true;} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException e) {e.printStackTrace();}}}return success;}/*** Description: 向FTP服務器上傳文件* * @param ip* FTP服務器hostname* @param port* FTP服務器端口,如果默認端口請寫-1* @param username* FTP登錄賬號* @param password* FTP登錄密碼* @param path* FTP服務器保存目錄* @param filename* 上傳到FTP服務器上的文件名* @param input* 輸入流* @return 成功返回true,否則返回false*/public static boolean uploadFile(String ip, int port, String username, String password, String path,String filename, InputStream input) {boolean success = false;FTPClient ftp = new FTPClient();try {int reply;// 連接FTP服務器if (port > -1) {ftp.connect(ip, port);} else {ftp.connect(ip);}// 登錄FTP ftp.login(username, password);reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();return success;}ftp.changeWorkingDirectory(path);ftp.storeFile(filename, input);input.close();ftp.logout();success = true;} catch (IOException e) {success = false;e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException e) {e.printStackTrace();}}}return success;}}
==============================================================================
獲取連接時候:
ftp.enterLocalPassiveMode();
這句話特別重要。
?