某些數(shù)據(jù)交換,我們需要通過ftp來完成。 sun.net.ftp.FtpClient 可以幫助我們進行一些簡單的ftp客戶端功能:下載、上傳文件。 但如遇到創(chuàng)建目錄之類的就無能為力了,我們只好利用第三方源碼,比如 com.enterprisedt.net.ftp.FTPClient 下面寫一些sun.net.ftp.FtpClient 的使用方法。 1、引入包 import java.io.DataInputStream;
import java.io.FileOutputStream; import java.io.IOException; import java.io.FileInputStream; import java.util.ArrayList; import java.util.Date; import java.util.List; import sun.net.*; import sun.net.ftp.FtpClient; 2、我們建一個叫做FtpUtil的class /**
* connectServer * 連接ftp服務器 * @throws java.io.IOException * @param path 文件夾,空代表根目錄 * @param password 密碼 * @param user 登陸用戶 * @param server 服務器地址 */ public void connectServer(String server, String user, String password, String path) throws IOException { // server:FTP服務器的IP地址;user:登錄FTP服務器的用戶名 // password:登錄FTP服務器的用戶名的口令;path:FTP服務器上的路徑 ftpClient = new FtpClient(); ftpClient.openServer(server); ftpClient.login(user, password); //path是ftp服務下主目錄的子目錄 if (path.length() != 0) ftpClient.cd(path); //用2進制上傳、下載 ftpClient.binary(); } /** * upload * 上傳文件 * @throws java.lang.Exception * @return -1 文件不存在 * -2 文件內(nèi)容為空 * >0 成功上傳,返回文件的大小 * @param newname 上傳后的新文件名 * @param filename 上傳的文件 */ public long upload(String filename,String newname) throws Exception { long result = 0; TelnetOutputStream os = null; FileInputStream is = null; try { java.io.File file_in = new java.io.File(filename); if (!file_in.exists()) return -1; if (file_in.length()==0) return -2; os = ftpClient.put(newname); result = file_in.length(); is = new FileInputStream(file_in); byte[] bytes = new byte[1024]; int c; while ((c = is.read(bytes)) != -1) { os.write(bytes, 0, c); } } finally { if (is != null) { is.close(); } if (os != null) { os.close(); } } return result; } /** * upload * @throws java.lang.Exception * @return * @param filename */ public long upload(String filename) throws Exception { String newname = ""; if (filename.indexOf("/")>-1) { newname = filename.substring(filename.lastIndexOf("/")+1); }else { newname = filename; } return upload(filename,newname); } /** * download * 從ftp下載文件到本地 * @throws java.lang.Exception * @return * @param newfilename 本地生成的文件名 * @param filename 服務器上的文件名 */ public long download(String filename,String newfilename) throws Exception { long result = 0; TelnetInputStream is = null; FileOutputStream os = null; try { is = ftpClient.get(filename); java.io.File outfile = new java.io.File(newfilename); os = new FileOutputStream(outfile); byte[] bytes = new byte[1024]; int c; while ((c = is.read(bytes)) != -1) { os.write(bytes, 0, c); result = result + c; } } catch (IOException e) { e.printStackTrace(); } finally { if (is != null) { is.close(); } if (os != null) { os.close(); } } return result; } /** * 取得某個目錄下的所有文件列表 * */ public List getFileList(String path) { List list = new ArrayList(); try { DataInputStream dis = new DataInputStream(ftpClient.nameList(path)); String filename = ""; while((filename=dis.readLine())!=null) { list.add(filename); } } catch (Exception e) { e.printStackTrace(); } return list; } /** * closeServer * 斷開與ftp服務器的鏈接 * @throws java.io.IOException */ public void closeServer() throws IOException { try { if (ftpClient != null) { ftpClient.closeServer(); } } catch (IOException e) { e.printStackTrace(); } } public static void main(String [] args) throws Exception { FtpUtil ftp = new FtpUtil(); try { //連接ftp服務器 ftp.connectServer("10.163.7.15", "cxl", "1", "info2"); /** 上傳文件到 info2 文件夾下 */ System.out.println("filesize:"+ftp.upload("f:/download/Install.exe")+"字節(jié)"); /** 取得info2文件夾下的所有文件列表,并下載到 E盤下 */ List list = ftp.getFileList("."); for (int i=0;i<list.size();i++) { String filename = (String)list.get(i); System.out.println(filename); ftp.download(filename,"E:/"+filename); } } catch (Exception e) { /// }finally { ftp.closeServer(); } } } 以上就是 使用 sun.net.ftp.FtpClient 操作ftp客戶端的使用方法。 |
|
來自: 岑經(jīng)滄海難為水 > 《JAVA》