java 将服务器内的文件复制

java 将服务器内的文件复制,第1张

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

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

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

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

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

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

下面列举出4种方式:

1、使用FileStreams复制

这是最经典的方式将一个文件的内容复制到另一个文件中。 使用FileInputStream读取文件A的字节,使用FileOutputStream写入到文件B。正如你所看到的我们执行几个读和写 *** 作try的数据,所以这应该是一个低效率的,下一个方法我们将看到新的方式。 这是第一个方法的代码:

2、使用FileChannel复制

Java NIO包括transferFrom方法,根据文档应该比文件流复制的速度更快。 这是第二种方法的代码:

3、使用Commons IO复制

Apache Commons IO提供拷贝文件方法在其FileUtils类,可用于复制一个文件到另一个地方。它非常方便使用Apache Commons FileUtils类时,您已经使用您的项目。基本上,这个类使用Java NIO FileChannel内部。 这是第三种方法的代码:

4、使用Java7的Files类复制

如果你有一些经验在Java 7中你可能会知道,可以使用复制方法的Files类文件,从一个文件复制到另一个文件。 这是第四个方法的代码:

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/


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

原文地址: http://outofmemory.cn/tougao/11785704.html

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

发表评论

登录后才能评论

评论列表(0条)

保存