Java中实现FTP上传下载文件的功能


转自:
这个正好用在我的工作中,所以必须要转

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



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;

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

        }

    }

}


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

        }

    }

}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现FTP下载可以使用Apache Commons Net库FTPClient类。以下是一个简单的示例代码: ```java import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import java.io.*; public class FTPExample { public static void main(String[] args) { String server = "ftp.example.com"; int port = 21; String user = "username"; String password = "password"; FTPClient ftpClient = new FTPClient(); try { ftpClient.connect(server, port); ftpClient.login(user, password); ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 上文件 File localFile = new File("local-file.txt"); InputStream inputStream = new FileInputStream(localFile); String remoteFile = "remote-file.txt"; boolean uploaded = ftpClient.storeFile(remoteFile, inputStream); inputStream.close(); if (uploaded) { System.out.println("文件成功!"); } else { System.out.println("文件失败!"); } // 下载文件 String downloadFile = "remote-file.txt"; File downloadLocalFile = new File("download-file.txt"); OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(downloadLocalFile)); boolean downloaded = ftpClient.retrieveFile(downloadFile, outputStream); outputStream.close(); if (downloaded) { System.out.println("文件下载成功!"); } else { System.out.println("文件下载失败!"); } ftpClient.logout(); } catch (IOException e) { e.printStackTrace(); } finally { if (ftpClient.isConnected()) { try { ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); } } } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值