文档章节

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

Carl_
 Carl_
发布于 2014/11/12 18:05
字数 1115
阅读 6392
收藏 35

一个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://www.codefans.net/articles/839.shtml

Carl_
粉丝 42
博文 387
码字总数 12168
作品 0
广州
私信 提问
加载中

评论(4)

Carl_
Carl_ 博主

引用来自“T-Vision甜甜甜”的评论

import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient; 这些包在哪里下载啊 或者maven怎么配置啊

apache的jar包吧...忘记了
T-Vision甜甜甜
T-Vision甜甜甜
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient; 这些包在哪里下载啊 或者maven怎么配置啊
Carl_
Carl_ 博主

引用来自“边城高守”的评论

挺实用的,顶一个

我也是复制的..哈哈哈哈..大家共勉
边城高守
边城高守
挺实用的,顶一个
ftp4j 1.5.1 发布,Java的FTP类库

ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能。可以将ftp4j嵌到你的Java应用中,来传输文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,...

红薯
2010/05/30
598
0
CKEditor3.x 在Java项目中配置、包括图片上传(支持FTP、图片压缩)

CKEditor 3.x配置说明 一、基本使用: 1、所需文件架包 A. Ckeditor基本文件包,比如:ckeditor_3.6.2.zip 下载地址:http://ckeditor.com/download 2、配置使用 A.将下载下来的CKEditor压缩...

一枚Sir
2014/05/29
0
0
ftp4j 1.7.2 发布,Java 的 FTP 客户端类库

ftp4j 1.7.2 发布,该版本修复了下载模块方面的bug,正确处理了 "502 Command REST not allowed by policy" 消息。 ftp4j是一个FTP客户端Java类库,实现了FTP客户端 应具有的大部分功能。可以...

oschina
2012/06/27
1K
0
Java使用SFTP和FTP两种连接方式实现对服务器的上传下载

一、Java实现对SFTP服务器的文件的上传下载 1、添加maven依赖: 2、SFTPUtils工具类: 二、Java实现对FTP服务器的文件的上传下载 有时系统可能要兼容ftp和sftp,而ftp的端口一般是21,sftp对...

灌南高手No1
2018/09/12
0
0
libcurl在android下的移植、编译与测试以及java接口的封装

curl是利用URL语法在命令行方式下工作的文件传输工具 它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。 curl同样支持HTTPS认证,HTTP POST方法, HTTP PUT...

zhoulc
2013/03/05
0
2

没有更多内容

加载失败,请刷新页面

加载更多

【redis】spring boot利用redis的Keyspace Notifications实现消息通知

前言 需求:当redis中的某个key失效的时候,更新key对应数据在数据库的状态 1、修改redis.conf 安装的redis服务默认是: notify-keyspace-events "",修改成 notify-keyspace-events Ex; 位置...

时刻在奔跑
29分钟前
2
0
IT基础设施中的人工智能可以改变工作的方式

  如今,减少人工智能的宣传和炒作已成为IT领导者的主要工作。提供有关人工智能在何处以及如何将其添加到IT基础设施的深入指南将会提供帮助。   很多技术提供商正在投入巨资,将人工智能...

琴殇的
29分钟前
3
0
vue cli3创建测试打包环境(通过development、production、alpha指定不同的接口地址)

参考地址 前言:项目一般有开发环境,测试环境,生产环境;vue cli内置有开发和生产环境,可以用process.env.NODE_ENV区分,有时候我们和后台同事需要本地连接调试代码,又需要连接测试环境调...

hkaikai
35分钟前
4
0
360安全浏览器龙芯、飞腾、兆芯版

主页https://browser.360.cn/se/linux/ 龙芯 http://down.360safe.com/gc/browser360-cn-stable-10.0.2001.0-1.mips64el.rpm http://down.360safe.com/gc/browser360-cn-stable_10.0.2001.0......

gugudu
36分钟前
46
0
访问JSP时,浏览器显示为

问题: <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param>......

器石_
40分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部