Java8实现FTP及SFTP文件上传下载

yizhihongxing

下面是关于“Java8实现FTP及SFTP文件上传下载”的完整攻略。

一、FTP文件上传下载

1.1 准备工作

在开始前,需要引入以下的Maven依赖:

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.6</version>
</dependency>

1.2 FTP文件上传

下面是FTP文件上传的主要代码:

public static boolean uploadFile(String host, int port, String username, String password, String basePath, String filePath, String filename, InputStream inputStream) {
    boolean result = false;
    FTPClient ftpClient = new FTPClient();
    ftpClient.setControlEncoding("UTF-8");
    try {
        ftpClient.connect(host, port); // 连接FTP服务器
        ftpClient.login(username, password); // 登录FTP服务器
        if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
            ftpClient.disconnect();
            return result;
        }
        ftpClient.changeWorkingDirectory(basePath);
        ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
        ftpClient.storeFile((filename), inputStream);
        inputStream.close();
        ftpClient.logout();
        result = true;
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (ftpClient.isConnected()) {
            try {
                ftpClient.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return result;
}

示例1:上传本地文件到FTP服务器

public static void main(String[] args) throws FileNotFoundException {
    FileInputStream fis = new FileInputStream(new File("D:\\temp\\test.txt"));
    boolean result = uploadFile("10.10.10.100", 21, "username", "password", "/data/files", "test", "test.txt", fis);
    System.out.println(result);
}

1.3 FTP文件下载

下面是FTP文件下载的主要代码:

public static boolean downloadFile(String host, int port, String username, String password, String remotePath, String fileName, String localPath) {
    boolean result = false;
    FTPClient ftpClient = new FTPClient();
    ftpClient.setControlEncoding("UTF-8");
    try {
        ftpClient.connect(host, port); // 连接FTP服务器
        ftpClient.login(username, password); // 登录FTP服务器
        if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
            ftpClient.disconnect();
            return result;
        }
        ftpClient.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
        FTPFile[] fs = ftpClient.listFiles();
        for (FTPFile ff : fs) {
            if (ff.getName().equals(fileName)) {
                File localFile = new File(localPath + "/" + ff.getName());
                OutputStream os = new FileOutputStream(localFile);
                ftpClient.retrieveFile(ff.getName(), os);
                os.close();
            }
        }
        ftpClient.logout();
        result = true;
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (ftpClient.isConnected()) {
            try {
                ftpClient.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return result;
}

示例2:从FTP服务器下载文件到本地

public static void main(String[] args) {
    boolean result = downloadFile("10.10.10.100", 21, "username", "password", "/data/files", "test.txt", "D:\\temp\\download");
    System.out.println(result);
}

二、SFTP文件上传下载

2.1 准备工作

在开始前,需要引入以下的Maven依赖:

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.54</version>
</dependency>

2.2 SFTP文件上传

下面是SFTP文件上传的主要代码:

public static boolean uploadFile(String host, int port, String username, String password, String basePath, String filePath, String filename, InputStream inputStream) {
    Session session = null;
    Channel channel = null;
    boolean result = false;
    try {
        JSch jsch = new JSch(); // 创建JSch对象
        session = jsch.getSession(username, host, port); // 根据用户名、主机ip和端口号获取session对象
        session.setPassword(password); // 设置密码
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect(); // 通过Session建立连接
        channel = session.openChannel("sftp"); // 打开SFTP通道
        channel.connect();
        ChannelSftp sftp = (ChannelSftp) channel;
        try {
            sftp.cd(basePath);
        } catch (SftpException e) {
            sftp.mkdir(basePath);
            sftp.cd(basePath);
        }
        sftp.put(inputStream, filename); // 上传文件
        inputStream.close();
        result = true;
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (session != null) {
            session.disconnect();
        }
        if (channel != null) {
            channel.disconnect();
        }
    }
    return result;
}

示例3:上传本地文件到SFTP服务器

public static void main(String[] args) throws FileNotFoundException {
    FileInputStream fis = new FileInputStream(new File("D:\\temp\\test.txt"));
    boolean result = uploadFile("10.10.10.100", 22, "username", "password", "/data/files", "test", "test.txt", fis);
    System.out.println(result);
}

2.3 SFTP文件下载

下面是SFTP文件下载的主要代码:

public static boolean downloadFile(String host, int port, String username, String password, String remotePath, String fileName, String localPath) {
    Session session = null;
    Channel channel = null;
    boolean result = false;
    try {
        JSch jsch = new JSch(); // 创建JSch对象
        session = jsch.getSession(username, host, port); // 根据用户名、主机ip和端口号获取session对象
        session.setPassword(password); // 设置密码
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect(); // 通过Session建立连接
        channel = session.openChannel("sftp"); // 打开SFTP通道
        channel.connect();
        ChannelSftp sftp = (ChannelSftp) channel;
        sftp.cd(remotePath);
        sftp.get(fileName, localPath); // 下载文件
        result = true;
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (session != null) {
            session.disconnect();
        }
        if (channel != null) {
            channel.disconnect();
        }
    }
    return result;
}

示例4:从SFTP服务器下载文件到本地

public static void main(String[] args) {
    boolean result = downloadFile("10.10.10.100", 22, "username", "password", "/data/files/test", "test.txt", "D:\\temp\\download");
    System.out.println(result);
}

以上就是Java8实现FTP及SFTP文件上传下载的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java8实现FTP及SFTP文件上传下载 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 详解Java的四种引用方式及其区别

    详解Java的四种引用方式及其区别 在Java中,引用通常被用来表示一个对象实例或者一个对象实例的地址信息,Java提供了四种引用方式,分别是强引用、软引用、弱引用和虚引用。本文将详细讲解这四种引用方式以及它们之间的区别。 1. 强引用(Strong Reference) 在Java中,最普通的引用是强引用(Strong Reference),它也是默认的引…

    Java 2023年5月26日
    00
  • Spring Security实现自定义访问策略

    Spring Security是一个开源的安全框架,提供了许多安全方案,其中自定义访问策略是Spring Security的核心之一。下面将详细讲解在Spring Security中实现自定义访问策略的完整攻略,包括以下内容: Spring Security的基本概念 自定义访问策略的原理 实现自定义访问策略的步骤 示例说明 1. Spring Securi…

    Java 2023年6月3日
    00
  • SpringBoot+微信小程序实现文件上传与下载功能详解

    Spring Boot + 微信小程序实现文件上传与下载功能详解 简介 本文将介绍如何通过微信小程序和 Spring Boot 实现文件上传和下载的功能。其中,文件上传使用到了微信小程序的 wx.uploadFile 方法,文件下载使用到了 ResponseEntity<Resource> 和 ByteArrayResource。 项目准备 Sp…

    Java 2023年5月23日
    00
  • SpringMVC Tomcat控制台乱码问题解决方案

    SpringMVC Tomcat控制台乱码问题解决方案 在使用SpringMVC和Tomcat时,有时会遇到控制台输出乱码的问题。本文将详细讲解如何解决这个问题,并提供两个示例说明。 1. 问题描述 在使用SpringMVC和Tomcat时,有时会遇到控制台输出乱码的问题。这个问题通常是由于控制台编码与系统编码不一致导致的。 2. 解决方案 要解决这个问题,…

    Java 2023年5月18日
    00
  • 解析Spring Mvc Long类型精度丢失问题

    引言 在Spring Mvc中,我们常常遇到处理Long类型数据的问题。但是在处理过程中,会发现有时候Long类型数据的精度会出现丢失的问题。本文将介绍如何解析Spring Mvc处理Long类型精度丢失问题,希望对大家有所帮助。 问题的根源 在Spring Mvc中,当处理Long类型数据时,会自动将字符串类型的参数转换为Long类型。但是在处理过程中,由…

    Java 2023年5月26日
    00
  • 使用 Navicat 创建数据库并用JDBC连接的操作方法

    这里给出使用 Navicat 创建数据库并用 JDBC 连接的操作方法,具体攻略如下: 准备工作 下载并安装 Navicat 数据库管理工具(需要购买或使用试用版); 下载并安装 JDK(Java Development Kit); 下载相应的 JDBC 驱动。 创建数据库 打开 Navicat,点击 “新建连接”; 选择数据库类型和连接方式; 输入主机名、…

    Java 2023年5月20日
    00
  • java配置dbcp连接池(数据库连接池)示例分享

    下面我将为您提供关于“Java配置DBCP连接池(数据库连接池)示例分享”的完整攻略: 什么是DBCP连接池 DBCP连接池是一个Java SQL连接池管理包,用于管理数据库连接的池。它使用JDBC连接接口,并管理连接,可重用连接的对象。 使用DBCP连接池的好处 DBCP连接池的好处如下: 连接池管理:可以重复使用现有的数据库连接,从而大大提高系统的性能和…

    Java 2023年5月19日
    00
  • Android开发中的文件操作工具类FileUtil完整实例

    下面我会详细讲解“Android开发中的文件操作工具类FileUtil完整实例”的攻略,包含以下几个方面的内容: 简介 文件读取 文件写入 文件复制 文件删除 示例说明 结论 1. 简介 在Android开发中,文件操作时常遇到,因此可以写一个工具类封装常用的文件操作,方便进行文件操作。 2. 文件读取 使用FileInputStream对象打开文件,然后使…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部