JAVA 实现FTP
一个JAVA 实现FTP功能的代码,包括了服务器的设置模块,并包括有上传文件至FTP的通用方法、下载文件的通用方法以及删除文件、在ftp服务器上穿件文件夹、检 测文件夹是否存在等,里面的有些代码对编写JAVA文件上传或许有参考价值,Java FTP主文件代码:001package ftpDemo;
002import java.io.DataOutputStream;
003import java.io.InputStream;
004import java.io.OutputStream;
005import sun.net.TelnetInputStream;
006import sun.net.TelnetOutputStream;
007import sun.net.ftp.FtpClient;
008public class ftpUtil {
009// 上传文件至FTP通用方法
010public static void upLoadFileFtp(KmConfig kmConfig,InputStream is, String fileName){
011 try {
012 String ftpHost = kmConfig.getFtpHost();
013 int port = kmConfig.getFtpPort();
014 String userName = kmConfig.getFtpUser();
015 String passWord = kmConfig.getFtpPassword();
016 String path = kmConfig.getFtpPath();
017 FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
018 ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
019 ftpClient.binary();
020 ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
021 TelnetOutputStream telnetOut = ftpClient.put(fileName);// fileName为上传的文件名
022 DataOutputStream dataOut = new DataOutputStream(telnetOut);
023 byte buffer[] = new byte;
024 int count = 0;
025 while ((count = is.read(buffer)) != -1) {
026 dataOut.write(buffer, 0, count);
027 }
028 telnetOut.close();
029 dataOut.close();
030 ftpClient.closeServer();
031 } catch (Exception e) {
032 System.out.println("上传文件失败!请检查系统FTP设置,并确认FTP服务启动");
033 }
034}
035// 删除文件至FTP通用方法
036public static void deleteFileFtp(KmConfig kmConfig,String fileName){
037 try {
038 String ftpHost = kmConfig.getFtpHost();
039 int port = kmConfig.getFtpPort();
040 String userName = kmConfig.getFtpUser();
041 String passWord = kmConfig.getFtpPassword();
042 String path = kmConfig.getFtpPath();
043 FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
044 ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
045 ftpClient.binary();
046 ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
047 try {
048 ftpClient.sendServer("dele " + fileName + "\r\n");
049 } catch (Exception e) {
050 System.out.println("删除文件失败!请检查系统FTP设置,并确认FTP服务启动");
051 }
052 ftpClient.closeServer();
053 } catch (Exception e) {
054 System.out.println("删除文件失败!");
055 }
056}
057// 下载ftp文件
058public static void downloadFileFtp(KmConfig kmConfig,String fileName, String clientFileName, OutputStream outputStream){
059 try {
060 String ftpHost = kmConfig.getFtpHost();
061 int port = kmConfig.getFtpPort();
062 String userName = kmConfig.getFtpUser();
063 String passWord = kmConfig.getFtpPassword();
064 String path = kmConfig.getFtpPath();
065 FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
066 ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
067 ftpClient.binary();
068 ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
069 try {
070 TelnetInputStream in = ftpClient.get(fileName);
071 byte[] bytes = new byte;
072 int cnt=0;
073 while ((cnt=in.read(bytes,0,bytes.length)) != -1) {
074 outputStream.write(bytes, 0, cnt);
075 }
076 outputStream.close();
077 in.close();
078 } catch (Exception e) {
079 ftpClient.closeServer();
080 e.printStackTrace();
081 }
082 ftpClient.closeServer();
083 } catch (Exception e) {
084 System.out.println("下载文件失败!请检查系统FTP设置,并确认FTP服务启动");
085 }
086}
087//在ftp服务器上传件文件夹
088 public boolean createDir(String path,FtpClient ftpClient) throws Exception{
089 //进入到home文件夹下
090 ftpClient.cd("/home");
091 //创建远程文件夹
092 //远程命令包括
093 //USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT<br>
094// PASS PASV STOR REST CWD STAT RMD XCUP OPTS<br>
095// ACCT TYPE APPE RNFR XCWD HELP XRMD STOU AUTH<br>
096// REIN STRU SMNT RNTO LIST NOOP PWD SIZE PBSZ<br>
097// QUIT MODE SYST ABOR NLST MKD XPWD MDTM PROT<br>
098// 在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上/r/n<br>
099// ftpclient.sendServer("XMKD /test/bb/r/n"); //执行服务器上的FTP命令<br>
100// ftpclient.readServerResponse一定要在sendServer后调用<br>
101// nameList("/test")获取指目录下的文件列表<br>
102// XMKD建立目录,当目录存在的情况下再次创建目录时报错<br>
103// XRMD删除目录<br>
104// DELE删除文件<br>
105 //通过远程命令 穿件一个files文件夹
106 ftpClient.sendServer("MKD "+ path + "\r\n");
107 //这个方法必须在 这两个方法中间调用 否则 命令不管用
108 ftpClient.binary();
109 ftpClient.readServerResponse();
110 return false;
111 }
112/**
113 * 检查文件夹是否存在
114 * @param dir
115 * @param ftpClient
116 * @return
117 */
118 public boolean isDirExist(String dir, FtpClient ftpClient) {
119 try {
120 ftpClient.cd(dir);
121 } catch (Exception e) {
122 return false;
123 }
124 return true;
125 }
126}
KmConfig.java代码如下:定义FTP服务器参数,包括登录的用户名密码之类的。
01package ftpDemo;
02public class KmConfig {
03 //主机ip
04 private String FtpHost = "";
05 //端口号
06 private int FtpPort;
07 //ftp用户名
08 private String FtpUser = "";
09 //ftp密码
10 private String FtpPassword = "";
11 //ftp中的目录
12 private String FtpPath = "";
13 public String getFtpHost() {
14 return FtpHost;
15 }
16 public void setFtpHost(String ftpHost) {
17 FtpHost = ftpHost;
18 }
19 public int getFtpPort() {
20 return FtpPort;
21 }
22 public void setFtpPort(int ftpPort) {
23 FtpPort = ftpPort;
24 }
25 public String getFtpUser() {
26 return FtpUser;
27 }
28 public void setFtpUser(String ftpUser) {
29 FtpUser = ftpUser;
30 }
31 public String getFtpPassword() {
32 return FtpPassword;
33 }
34 public void setFtpPassword(String ftpPassword) {
35 FtpPassword = ftpPassword;
36 }
37 public String getFtpPath() {
38 return FtpPath;
39 }
40 public void setFtpPath(String ftpPath) {
41 FtpPath = ftpPath;
42 }
43}
下面是测试代码:
01package ftpDemo;
02import java.io.File;
03import java.io.FileInputStream;
04import java.io.FileNotFoundException;
05import java.io.InputStream;
06public class Test {
07 public static void main(String[] args) {
08 //设置ftp
09 KmConfig km = new KmConfig();
10 km.setFtpHost("172.20.32.48");
11 km.setFtpPort(21);
12 km.setFtpUser("test");
13 km.setFtpPassword("111111");
14 km.setFtpPath("KM");
15 //上传到ftp
16 ftpUtil util=new ftpUtil();
17 File file = new File("F:/文章2.jpg");
18 InputStream in;
19 try {
20 in = new FileInputStream(file);
21 util.upLoadFileFtp(km, in, "更改后的名字.jpg");
22 } catch (FileNotFoundException e) {
23 // TODO Auto-generated catch block
24 e.printStackTrace();
25 }
26 }
27}
页:
[1]