JAVA 读取ftp和sftp文件

本文详细介绍了如何使用JAVA读取FTP和SFTP文件。在读取FTP文件时,作者遇到了中文文件名无法正常读取的问题,通过修改Windows IIS FTP服务器的UTF-8设置解决了问题。而对于SFTP文件的读取,文章同样提供了maven依赖配置和代码示例。
摘要由CSDN通过智能技术生成

1、读取ftp文件

1.1、maven依赖配置

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

1.2、代码(读取文件列表||文件内容)

package cn.com.beijiaoguzai.test;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import java.io.*;

/**
 * ftp读取文件
 */
public class FtpUtil {

    /**
     * 获取FTP连接
     * @param url ftp ip地址
     * @param port 端口
     * @param username 用户名
     * @param password 密码
     * @return
     * @throws Exception
     */
    public static FTPClient getFtpClient(String url,int port,String username,String password) throws Exception {
        FTPClient ftp = null;
        int reply;
        ftp = new FTPClient();
        // 设置timeout时间
        ftp.setConnectTimeout(30000);
        ftp.connect(url,port);
        ftp.login(username,password);
        //ftp.setFileType(FTP.ASCII_FILE_TYPE);
        reply = ftp.getReplyCode();
        if (!FTPReply.isPositiveCompletion(reply)) {
            ftp.disconnect();
            return null;
        }

        //设置编码格式
        if(FTPReply.isPositiveCompletion(ftp.sendCommand("OPTS UTF8","ON"))){
            ftp.setControlEncoding("UTF-8");
        }else{
            ftp.setControlEncoding("GBK");
        }

        return ftp;
    }

    /**
     * 获取文件夹下某个文件信息流
     * @param ftpClient
     * @param path 文件路径
     * @param fileName  文件名
     * @return
     */
    public static InputStream getFTPFileInputStream(FTPClient ftpClient,String path,String fileName){
        InputStream in = null;
        try {
            if(ftpClient == null){
                return in;
            }
            ftpClient.changeWorkingDirectory(path);
            FTPFile[] files = ftpClient.listFiles();


            if(files.length > 0){
                //解决中文路径问题
                in = ftpClient.retrieveFileStream(new String(fileName.getBytes("gbk"), FTP.DEFAULT_CONTROL_ENCODING));

            }
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("FTP 读取数据异常!");
        }finally{
            //关闭连接
            if(ftpClient != null){
                disConnection(ftpClient);
            }
            return in;
        }
    }

    /**
     * 获取Ftp 文件内容
     * @param url ftp ip地址
     * @param port 端口
     * 
  • 11
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在 Java读取 Linux 服务器上的文件可以使用 Java NIO 包中的 FileChannel 类。例如,可以使用以下代码将文件从 Linux 服务器上读取到本地: ```java FileChannel inChannel = new FileInputStream("/path/to/remote/file.txt").getChannel(); FileChannel outChannel = new FileOutputStream("/path/to/local/file.txt").getChannel(); inChannel.transferTo(0, inChannel.size(), outChannel); ``` 此代码将远程文件从 Linux 服务器上读取到本地文件中。 如果要直接读取远程文件而不是将其复制到本地,可以使用 Apache Commons VFS 库。 ``` FileSystemOptions opts = new FileSystemOptions(); SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no"); FileSystemManager fsManager = VFS.getManager(); FileObject remoteFile = fsManager.resolveFile("sftp://username:password@hostname/path/to/remote/file.txt", opts); InputStream inputStream = remoteFile.getContent().getInputStream(); ``` 这是使用 SFTP 连接读取文件的示例,您也可以使用 FTP 或 HTTP。 ### 回答2: Java是一种非常强大的开发语言,可以用于开发各种不同的应用程序。其中,读取Linux服务器文件也是Java的常见应用之一。 首先,Java可以使用标准的I/O API来打开、读取和关闭文件。在Linux服务器上,Java可以使用Java中的File类来代表一个文件,可以使用FileInputStream类来打开文件读取其中的内容。通过这种方式,Java可以轻松地读取Linux服务器上的文件。 另外,Java还可以使用SSH协议连接到Linux服务器,并通过SSH连接来读取文件。SSH连接是一种安全的连接方式,可以通过Java的JSch库来实现。通过SSH连接,Java可以使用标准的I/O API来读取Linux服务器上的文件,并将文件内容传输到本地计算机。 在读取Linux服务器上的文件时,需要注意文件的权限和安全性。Linux服务器上的文件可能会受到严格的权限控制,只有具备访问权限的用户才能够读取其中的内容。因此,在使用Java读取Linux服务器上的文件时,需要确保用户具备足够的权限,并且采取安全的措施,以防止文件内容泄露。 总之,读取Linux服务器上的文件Java应用程序常见的应用之一。通过Java的标准I/O API或者SSH连接,可以轻松地读取Linux服务器上的文件,并将文件内容传输到本地计算机。关键是要确保用户具备足够的权限,并采取安全的措施,以保护文件内容不被泄露。 ### 回答3: Java可以通过FTPSFTP、SSH等协议来操作Linux服务器文件。 1. FTP协议 FTP协议是最常用的文件传输协议,Java提供了FTPClient类来操作FTP服务器。使用FTP协议时,需要在Linux服务器上安装FTP服务器软件,在Java代码中引入commons-net-3.6.jar包,代码示例如下: ```java public static void main(String[] args) throws IOException { String server = "server.host.name"; int port = 21; String username = "username"; String password = "password"; FTPClient client = new FTPClient(); try { client.connect(server, port); client.login(username, password); client.changeWorkingDirectory("/path/to/file"); InputStream inputStream = client.retrieveFileStream("filename.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } finally { client.disconnect(); } } ``` 2. SFTP协议 SFTP协议是基于SSH的文件传输协议,Java提供了JSch库来操作SFTP服务器。使用SFTP协议时,需要在Linux服务器上安装OpenSSH软件,并在Java代码中引入jsch-0.1.54.jar包,代码示例如下: ```java public static void main(String[] args) throws JSchException, SftpException, IOException { String server = "server.host.name"; int port = 22; String username = "username"; String password = "password"; String remoteFile = "/path/to/file/filename.txt"; JSch jsch = new JSch(); Session session = jsch.getSession(username, server, port); session.setPassword(password); session.setConfig("StrictHostKeyChecking", "no"); // bypass host key check session.connect(); ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp"); channelSftp.connect(); InputStream inputStream = channelSftp.get(remoteFile); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } channelSftp.disconnect(); session.disconnect(); } ``` 3. SSH协议 SSH协议是一种远程连接协议,Java提供了JSch库来操作SSH服务器。使用SSH协议时,需要在Linux服务器上安装OpenSSH软件,并在Java代码中引入jsch-0.1.54.jar包,代码示例如下: ```java public static void main(String[] args) throws JSchException, IOException { String server = "server.host.name"; int port = 22; String username = "username"; String password = "password"; String command = "cat /path/to/file/filename.txt"; JSch jsch = new JSch(); Session session = jsch.getSession(username, server, port); session.setPassword(password); session.setConfig("StrictHostKeyChecking", "no"); // bypass host key check session.connect(); Channel channel = session.openChannel("exec"); ((ChannelExec) channel).setCommand(command); channel.setInputStream(null); ((ChannelExec) channel).setErrStream(System.err); InputStream inputStream = channel.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); channel.connect(); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } channel.disconnect(); session.disconnect(); } ``` 以上是Java读取Linux服务器文件的几种方法,具体选择哪种方法需要根据实际情况而定。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值