`

JAVA 实现FTP

    博客分类:
  • java
 
阅读更多

一个JAVA 实现FTP功能的代码,包括了服务器的设置模块,并包括有上传文件至FTP的通用方法、下载文件的通用方法以及删除文件、在ftp服务器上穿件文件夹、检 测文件夹是否存在等,里面的有些代码对编写JAVA文件上传或许有参考价值,Java FTP主文件代码:

001 package ftpDemo;
002 import java.io.DataOutputStream;
003 import java.io.InputStream;
004 import java.io.OutputStream;
005 import sun.net.TelnetInputStream;
006 import sun.net.TelnetOutputStream;
007 import sun.net.ftp.FtpClient;
008 public class ftpUtil {
009 // 上传文件至FTP通用方法
010 public 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[1024 * 1024];
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通用方法
036 public 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文件
058 public 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[1024];
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服务器参数,包括登录的用户名密码之类的。

01 package ftpDemo;
02 public 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 }

下面是测试代码:

01 package ftpDemo;
02 import java.io.File;
03 import java.io.FileInputStream;
04 import java.io.FileNotFoundException;
05 import java.io.InputStream;
06 public 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 }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics