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

下面是关于“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日

相关文章

  • SpringBoot MyBatis简单快速入门例子

    下面我为您介绍一下”SpringBoot MyBatis简单快速入门例子”的完整攻略。 1. 概述 Spring Boot 是一种快速开发应用程序的框架,它可以通过简单的配置来启动 Web 应用程序和服务。MyBatis 是一种 Java 持续层框架,它简化了数据库操作的过程。 在本文中,我们将讨论如何在 Spring Boot 中使用 MyBatis 进行…

    Java 2023年5月19日
    00
  • JSP实现用户登录、注册和退出功能

    下面是详细讲解“JSP实现用户登录、注册和退出功能”的完整攻略。 1. 前置条件 了解Java web开发相关知识 掌握Tomcat服务器的使用方式 下载并安装MySQL数据库 掌握JSP基本语法 2. 构建JSP Web项目 使用Eclipse等常用IDE创建一个JSP Web项目,配置好Tomcat服务器及数据库连接。 3. 数据库设计 用户信息在本案例…

    Java 2023年6月15日
    00
  • SpringSecurity权限控制实现原理解析

    关于SpringSecurity权限控制实现原理解析,以下是完整攻略: 概述 Spring Security是一个Java企业级应用程序的安全性框架,为企业级应用程序提供了强大的认证和授权处理。其中权限控制是Spring Security中最重要的组件之一,通过配置安全策略,能够控制用户对某一资源是否具有访问权限。在Spring Security中,权限控制…

    Java 2023年5月20日
    00
  • 利用Java实体bean对象批量数据传输处理方案小结

    下面是详细讲解“利用Java实体bean对象批量数据传输处理方案小结”的完整攻略: 一、背景 在Java Web开发中,实体bean对象通常被用于封装表单数据、请求参数等信息,通过实体bean对象可以方便地进行数据传输和处理。在处理大量数据时,使用Java实体bean对象批量传输可以提高系统性能,缩短数据处理时间,同时也可以避免一些重复工作,提高开发效率。 …

    Java 2023年5月26日
    00
  • 解决Maven中关于依赖导入不进的问题

    让我来详细讲解一下“解决Maven中关于依赖导入不进的问题”的完整攻略。 检查maven仓库中是否存在依赖库 首先,我们需要检查maven的本地仓库中是否已经存在了需要导入的依赖库。可以通过在命令行中输入以下命令来查看: mvn dependency:resolve 如果发现有依赖库缺失的情况,那么我们需要手动安装相应的依赖库到本地仓库中。可以通过在命令行中…

    Java 2023年5月20日
    00
  • Java数字签名算法DSA实例详解

    Java数字签名算法DSA实例详解 什么是数字签名算法? 数字签名算法是指利用公开密钥加密算法,对某些信息进行加密以验证信息的完整性、来源和真实性的技术。数字签名通常使用私钥进行签名和公钥进行验证。 DSA数字签名算法介绍 DSA是数字签名算法(Digtial Signature Algorithm)的缩写,是美国国家安全局(NSA)和国家标准局(NIST)…

    Java 2023年5月19日
    00
  • Java检查日期字符串是否合法的方法总结

    下面是详细的讲解。 一、问题描述 在Java中,经常需要对日期字符串进行处理。然而,在处理日期字符串时,会遇到日期格式不正确的情况。因此,如何检查一个日期字符串是否符合某种固定格式是非常重要的。 二、实现思路 检查一个日期字符串是否合法的主要思路是对日期格式进行校验。Java中提供了许多日期格式的校验方式,比较常用的有以下几种: 使用SimpleDateFo…

    Java 2023年5月20日
    00
  • Java基础之文件和目录操作

    Java基础之文件和目录操作 在Java中,文件和目录操作是很常见的任务。Java提供了一系列的类和方法来实现这些操作。本文将介绍Java中文件和目录的基础操作。 文件基础操作 创建文件 在Java中,使用File类来创建文件。可以通过以下代码创建一个新的文件: File file = new File("example.txt"); t…

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