java中怎么实现ftp文件传输

java中怎么实现ftp文件传输,第1张

package com.quantongfu.ftp.ftp

import java.io.File

import java.io.FileInputStream

import java.io.IOException

import java.net.ServerSocket

import java.util.List

import org.apache.commons.net.ftp.FTPReply

import org.apache.log4j.Logger

import org.apache.log4j.net.SocketServer

import com.quantongfu.conf.FtpConf

/**

 * @项目名称: telinSyslog

 * @文件名称: Ftp.java

 * @创建日期:2015年9月14日 下午3:22:08

 * @功能描述:ftp实体类,用于连接,上传

 * @修订记录:

 */

public class Ftp {

    private static Logger logger = Logger.getLogger(Ftp.class)

    private FTPClient ftp

    /**

     * 

     * @param path

     *            上传到ftp服务器哪个路径下

     * @param addr

     *            地址

     * @param port

     *            端口号

     * @param username

     *            用户名

     * @param password

     *            密码

     * @return

     * @throws Exception

     */

    public boolean connect() throws Exception {

        boolean result = false

        ftp = new FTPClient()

        int reply

        ftp.connect(FtpConf.FTP_HOST, FtpConf.FTP_PORT)

        ftp.login(FtpConf.FTP_USER_NAME, FtpConf.FTP_PASSWORD)

        ftp.setFileType(FTPClient.BINARY_FILE_TYPE)

        ftp.setDataTimeout(60000)

        reply = ftp.getReplyCode()

        if (!FTPReply.isPositiveCompletion(reply)) {

            ftp.disconnect()

            return result

        }

        if (FtpConf.IS_FTP_DIRECTORY) {

            ftp.changeWorkingDirectory(FtpConf.FTP_DIRECTORY)

        }

        result = true

        return result

    }

    /**

     * 

     * @param files

     *     搜扮携       上传的文件

     * @throws Exception

     */

    public boolean upload(File file) throws IOException 世伏{

        FileInputStream input = null

        try {

            input = new FileInputStream(file)

            boolean b = ftp.storeFile(file.getName() + ".tmp", input)

            if (b) {

                b = ftp.rename(file.getName() + ".tmp", file.getName())

            }

            return b

        } catch (Exception e) {

            e.printStackTrace()

            return false

        } finally {

       缺族     if (input != null) {

                input.close()

            }

        }

    }

    /**

     * 

     * @param files

     *            上传的文件

     * @throws Exception

     */

    public boolean upload(ServerSocket server, File file) throws Exception {

        FileInputStream input = null

        try {

            if (!file.exists()) {

                return true

            }

            input = new FileInputStream(file)

            boolean b = ftp.storeFile(server, file.getName() + ".tmp", input)

            if (b) {

                b = ftp.rename(file.getName() + ".tmp", file.getName())

                if (b) {

                    file.delete()

                }

            }

            return b

        } catch (Exception e) {

            logger.error("ftp error" + e.getMessage())

            return false

        } finally {

            if (input != null) {

                try {

                    input.close()

                } catch (IOException e) {

                    e.printStackTrace()

                }

            }

        }

    }

        /*断开连接*/

    public void disConnect() {

        try {

            if (ftp != null) {

                ftp.disconnect()

            }

        } catch (IOException e) {

            e.printStackTrace()

        }

    }

        /*获取连接*/

    public static Ftp getFtp() {

        Ftp ftp = new Ftp()

        try {

            ftp.connect()

        } catch (Exception e) {

            logger.error("FTP连接异常" + e.getMessage())

            e.printStackTrace()

        }

        return ftp

    }

        /*重连*/

    public Ftp reconnect() {

        disConnect()

        return getFtp()

    }

}

使用Apache FtpClient jar包,获取jar : http://commons.apache.org/net/

1.使用的FileZillaServer开源,安装过后指者建立的本地FTP服务器。2.使用的apache上FTP工具包,引用到工程目录中。3.IDE,Eclipse,JDK6上传和目录的实现原理:对每一个层级的目录进行判断,是为目录类型、还是文件类型。如果为目录类型,采用递归调用方法,检查到最底层的目录为唯族薯止结束。如果为文件类型,则调用上传或者方法对文件进行上传或者 *** 作。贴出代码:(其中有穗祥些没有代码,可以看看,还是很有用处的)!

你有FTPClient就比较好办,假如你的塌罩两台FTP服务器分别为fs1和fs2

在本地开发代码思路如下:

通过FTPClient连接上fs1,然后下载(可以循环批量下载)到本地服务器,保存族衫蔽到一个临时目录。

下载完成后,FTPClient断开与fs1的连接,记得必须logout。

本地服务器通过兆州FileInputStream将刚下载到临时目录的文件读进来,得到一个List<File>集合。

通过FTPClient连接上fs2,循环List<File>集合,将文件上传至fs2的特定目录,然后清空临时目录,上传完毕后,断开fs2的连接,同样必须logout。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/12231727.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存