咸星 发表于 2016-6-7 11:29:00

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]
查看完整版本: JAVA 实现FTP