Java中实现FTP上传下载文件的功能,完整代码

jopen 10年前

一个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;        }    }

下面是测试代码:

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();            }        }    }

来自:http://my.oschina.net/u/1866821/blog/343650