Java中實現FTP上傳下載文件的功能,完整代碼
一個JAVA 實現FTP功能的代碼,包括了服務器的設置模塊,并包括有上傳文件至FTP的通用方法、下載文件的通用方法以及刪除文件、在ftp服務器上穿件文件夾、檢測文件夾是否存在等,里面的有些代碼對編寫JAVA文件上傳或許有參考價值,Java FTP主文件代碼:
package ftpDemo; import java.io.DataOutputStream; import java.io.InputStream; import java.io.OutputStream; import sun.net.TelnetInputStream; import sun.net.TelnetOutputStream; import sun.net.ftp.FtpClient; public class ftpUtil { // 上傳文件至FTP通用方法 public static void upLoadFileFtp(KmConfig kmConfig,InputStream is, String fileName){ try { String ftpHost = kmConfig.getFtpHost(); int port = kmConfig.getFtpPort(); String userName = kmConfig.getFtpUser(); String passWord = kmConfig.getFtpPassword(); String path = kmConfig.getFtpPath(); FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost為FTP服務器的IP地址,port為FTP服務器的登陸端口,ftpHost為String型,port為int型。 ftpClient.login(userName, passWord);// userName、passWord分別為FTP服務器的登陸用戶名和密碼 ftpClient.binary(); ftpClient.cd(path);// path為FTP服務器上保存上傳文件的路徑。 TelnetOutputStream telnetOut = ftpClient.put(fileName);// fileName為上傳的文件名 DataOutputStream dataOut = new DataOutputStream(telnetOut); byte buffer[] = new byte[ * ]; int count = ; while ((count = is.read(buffer)) != -) { dataOut.write(buffer, , count); } telnetOut.close(); dataOut.close(); ftpClient.closeServer(); } catch (Exception e) { System.out.println("上傳文件失敗!請檢查系統FTP設置,并確認FTP服務啟動"); } } // 刪除文件至FTP通用方法 public static void deleteFileFtp(KmConfig kmConfig,String fileName){ try { String ftpHost = kmConfig.getFtpHost(); int port = kmConfig.getFtpPort(); String userName = kmConfig.getFtpUser(); String passWord = kmConfig.getFtpPassword(); String path = kmConfig.getFtpPath(); FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost為FTP服務器的IP地址,port為FTP服務器的登陸端口,ftpHost為String型,port為int型。 ftpClient.login(userName, passWord);// userName、passWord分別為FTP服務器的登陸用戶名和密碼 ftpClient.binary(); ftpClient.cd(path);// path為FTP服務器上保存上傳文件的路徑。 try { ftpClient.sendServer("dele " + fileName + "\r\n"); } catch (Exception e) { System.out.println("刪除文件失敗!請檢查系統FTP設置,并確認FTP服務啟動"); } ftpClient.closeServer(); } catch (Exception e) { System.out.println("刪除文件失敗!"); } } // 下載ftp文件 public static void downloadFileFtp(KmConfig kmConfig,String fileName, String clientFileName, OutputStream outputStream){ try { String ftpHost = kmConfig.getFtpHost(); int port = kmConfig.getFtpPort(); String userName = kmConfig.getFtpUser(); String passWord = kmConfig.getFtpPassword(); String path = kmConfig.getFtpPath(); FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost為FTP服務器的IP地址,port為FTP服務器的登陸端口,ftpHost為String型,port為int型。 ftpClient.login(userName, passWord);// userName、passWord分別為FTP服務器的登陸用戶名和密碼 ftpClient.binary(); ftpClient.cd(path);// path為FTP服務器上保存上傳文件的路徑。 try { TelnetInputStream in = ftpClient.get(fileName); byte[] bytes = new byte[]; int cnt=; while ((cnt=in.read(bytes,,bytes.length)) != -) { outputStream.write(bytes, , cnt); } outputStream.close(); in.close(); } catch (Exception e) { ftpClient.closeServer(); e.printStackTrace(); } ftpClient.closeServer(); } catch (Exception e) { System.out.println("下載文件失敗!請檢查系統FTP設置,并確認FTP服務啟動"); } } //在ftp服務器上傳件文件夾 public boolean createDir(String path,FtpClient ftpClient) throws Exception{ //進入到home文件夾下 ftpClient.cd("/home"); //創建遠程文件夾 //遠程命令包括 //USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT<br> // PASS PASV STOR REST CWD STAT RMD XCUP OPTS<br> // ACCT TYPE APPE RNFR XCWD HELP XRMD STOU AUTH<br> // REIN STRU SMNT RNTO LIST NOOP PWD SIZE PBSZ<br> // QUIT MODE SYST ABOR NLST MKD XPWD MDTM PROT<br> // 在服務器上執行命令,如果用sendServer來執行遠程命令(不能執行本地FTP命令)的話,所有FTP命令都要加上/r/n<br> // ftpclient.sendServer("XMKD /test/bb/r/n"); //執行服務器上的FTP命令<br> // ftpclient.readServerResponse一定要在sendServer后調用<br> // nameList("/test")獲取指目錄下的文件列表<br> // XMKD建立目錄,當目錄存在的情況下再次創建目錄時報錯<br> // XRMD刪除目錄<br> // DELE刪除文件<br> //通過遠程命令 穿件一個files文件夾 ftpClient.sendServer("MKD "+ path + "\r\n"); //這個方法必須在 這兩個方法中間調用 否則 命令不管用 ftpClient.binary(); ftpClient.readServerResponse(); return false; } /** * 檢查文件夾是否存在 * @param dir * @param ftpClient * @return */ public boolean isDirExist(String dir, FtpClient ftpClient) { try { ftpClient.cd(dir); } catch (Exception e) { return false; } return true; } }
KmConfig.java代碼如下:定義FTP服務器參數,包括登錄的用戶名密碼之類的。
package ftpDemo;public class KmConfig {
//主機ip
private String FtpHost = "";
//端口號
private int FtpPort;
//ftp用戶名
private String FtpUser = "";
//ftp密碼
private String FtpPassword = "";
//ftp中的目錄
private String FtpPath = "";
public String getFtpHost() {
return FtpHost;
}
public void setFtpHost(String ftpHost) {
FtpHost = ftpHost;
}
public int getFtpPort() {
return FtpPort;
}
public void setFtpPort(int ftpPort) {
FtpPort = ftpPort;
}
public String getFtpUser() {
return FtpUser;
}
public void setFtpUser(String ftpUser) {
FtpUser = ftpUser;
}
public String getFtpPassword() {
return FtpPassword;
}
public void setFtpPassword(String ftpPassword) {
FtpPassword = ftpPassword;
}
public String getFtpPath() {
return FtpPath;
}
public void setFtpPath(String ftpPath) {
FtpPath = ftpPath;
}
}</pre>
下面是測試代碼:
package ftpDemo;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class Test {
public static void main(String[] args) {
//設置ftp
KmConfig km = new KmConfig();
km.setFtpHost("...");
km.setFtpPort();
km.setFtpUser("test");
km.setFtpPassword("");
km.setFtpPath("KM");
//上傳到ftp
ftpUtil util=new ftpUtil();
File file = new File("F:/文章.jpg");
InputStream in;
try {
in = new FileInputStream(file);
util.upLoadFileFtp(km, in, "更改后的名字.jpg");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}</pre>
來自:http://my.oschina.net/u/1866821/blog/343650