首页 > 其他分享 >FTP下载远程服务器乱码文件夹以及文件夹下文件

FTP下载远程服务器乱码文件夹以及文件夹下文件

时间:2023-04-12 21:14:52浏览次数:42  
标签:FTP ftp fs String ftpc 乱码 文件夹 import

问题描述:需要读取远程服务器文件,但是远程服务器文件所在目录存在乱码,导致无法进入文件所在目录读取文件!

实现思路:通过FTP下载并转码到本地服务器之后,解决掉乱码问题之后再读取文件夹下的文件。

 

package com.guli.edu.FTPDown;

import com.guli.edu.excel.ExcelUtils02;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class FTPDownLoadRemoteFile {


    private static Logger logger =  LoggerFactory.getLogger("FTPDownLoadRemoteFile.class");

    public boolean downFile(String ip, int port, String username, String password, String remotePath, String fileName, String localPath) {
        boolean success = false;
        FTPClient ftpc = new FTPClient();
        String LOCAL_CHARSET="GBK";
        try {

            logger.info("连接ftp----");
            //ftpc.setCharset(Charset.forName("GBK"));

            //ftp中文编码设置
            ftpc.setControlEncoding("GBK");
            FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX);
            conf.setServerLanguageCode("zh");
            ftpc.configure(conf);

            int reply;
           // ftpc.connect(ip,port);
            logger.info("--------------连接ftp成功--------------");

            //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
            ftpc.connect(ip);
            ftpc.login(username, password);//登录
            reply = ftpc.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftpc.disconnect();
                return success;
            }

            logger.info("切换路径:"+remotePath);
            FTPFile[] fs = ftpc.listFiles();
            //判断本地的日期路径是否存在
            File file = new File(localPath);
            //判断文件夹是否存在,如果不存在则创建文件夹
            if (!file.exists()) {
                file.mkdir();
            }
            downFilePathRecursion(ftpc,remotePath,localPath);
            ftpc.logout();
            success = true;
        }catch (Exception e){

            // e.printStackTrace();
            logger.error("ftp下载报错", e);

        }finally {

            if (ftpc.isConnected()) {
                try {
                    ftpc.disconnect();
                } catch (Exception ioe) {
                    ioe.printStackTrace();
                }
            }

        }
        return true;
    }




    //递归遍历下载文件、创建文件夹
    public void downFilePathRecursion( FTPClient ftpc,String remotePath,String localPath) {

        try {
            FTPFile[] fs = ftpc.listFiles();
            //判断本地的日期路径是否存在
            File file = new File(localPath);
            //判断文件夹是否存在,如果不存在则创建文件夹
            if (!file.exists()) {
                file.mkdir();
            }
            for (int i = 0; i < fs.length; i++){
                if (!fs[i].isDirectory()){//判断是否是文件夹 不是文件夹,则下载文件
                    logger.info("文件名称:"+fs[i].getName());
                    File localFile = new File(localPath+"/"+fs[i].getName());
                    OutputStream is = new FileOutputStream(localFile);
                    ftpc.retrieveFile(new String(fs[i].getName().getBytes("utf-8"), "GBK"), is);
                    is.close();
                    logger.info("下载完毕----");

                }else if (fs[i].isDirectory()){//判断是否是文件夹 是文件夹,则递归遍历
                    logger.info("文件夹名称:"+fs[i].getName());


                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

 

 

参考连接:https://blog.csdn.net/weixin_33804990/article/details/93585653

 

 

 

 

 

 

 

 

 

 

 

参考连接:https://blog.csdn.net/weixin_33804990/article/details/93585653

标签:FTP,ftp,fs,String,ftpc,乱码,文件夹,import
From: https://www.cnblogs.com/BigBen9527/p/17311235.html

相关文章

  • 决策树可视化Graphviz中文乱码
    输出svg时中文显示正常!!!fromsiximportStringIO#可视化dot_data=StringIO()tree.export_graphviz(clf,out_file=dot_data,feature_names=feature_name,class_names=target_name,filled=True,rounded=True,special_characte......
  • NAS如何挂载远程文件夹
    铁威马NAS支持通过远程服务器或者其他TNAS设备挂载到NAS设备里,既扩展我们NAS的空间又能方便我们存取文件。今天以铁威马NAS为例,跟大家分享一下如何挂载远程文件夹,铁威马支持两种方式的挂载,它们分别是NFS和SMB。特别注意:挂载的文件夹不支持挂载加密共享文件夹。NFS挂载方式1、首......
  • Code-C++-Linux-统计一个文件夹占据空间大小
    Code-C++-Linux-统计一个文件夹占据空间大小https://my.oschina.net/Tsybius2014/blog/330628从以上链接中拷贝的代码#include<stdio.h>#include<sys/stat.h>#include<sys/types.h>#include<unistd.h>#include<stdlib.h>#include<dirent.h>#incl......
  • Linux ftp命令
    Linuxftp命令ftp后续作为一个专题整理操作,工作常用与文件转储Linuxftp命令设置文件系统相关功能。FTP是ARPANet的标准文件传输协议,该网络就是现今Internet的前身。语法ftp[-dignv][主机名称或IP地址]参数:-d详细显示指令执行过程,便于排错或分析程序执行的情形。-i关......
  • win10启动文件夹在哪里
    按Win+R键打开运行窗口,输入“shell:CommonStartup”代码。点击下面的确定按钮,运行代码。弹出文件夹即为系统启动文件夹。然后可以把希望自启动的程序的快捷方式复制到这个文件夹里,实现开机自启。......
  • Java创建文件时同时需要创建外层多个文件夹
    在Java中,如果您使用File类创建一个新文件,并且指定的路径中包含不存在的文件夹,那么会抛出IOException异常,因为Java不会自动创建缺少的目录结构。要解决这个问题,可以通过以下方法来手动创建缺失的目录:使用File.mkdirs()方法在所需的目录结构下创建文件夹。例如:1Filefile......
  • FTP命令
    1、连接ftp服务器ftp下载命令:格式:ftp[hostname|ip-address]a)在linux命令行下输入:ftp192.168.1.1b)服务器询问你用户名和密码,分别输入用户名和相应密码,待认证通过即可。2、下载文件下载文件通常用get和mget这两条命令。a)get格式:get[remote-file][local-file]将......
  • Bat批处理echo输出乱码解决办法
    在批处理文件中,如果输出中文字符会出现乱码的情况,可能是因为控制台的字符编码不正确。可以在批处理文件中使用chcp命令来更改控制台的字符编码。chcp命令的语法如下:chcp[代码页]其中,代码页是指字符编码的形式,例如936代表GB2312编码,65001代表UTF-8编码等。如果要将控制台字符......
  • 使用ftp搭建yum服务器
    操作系统版本:Centos7.9yum服务器配置#挂载操作系统ISO文件mount/dev/cdrom/mnt#复制rpm包至本地mkdir/yumscp-r/mnt/*/yums#创建新的repo文件cd/etc/yum.repos.drm-rf*.repoecho"[EL]">>/etc/yum.repos.d/yums.repoecho"name=Linux7.9DVD">>/......
  • 公式编辑器mathType中的公式在word中显示乱码的问题
    1.问题描述mathType中的公式在word中出现部分乱码的情况,如下分别为乱码和正常的公式主要表现为,公式双击后按ctrl+s后word中的公式表现为正常。由于一篇文章同类公式均会乱码,一个个修改比较麻烦且可能遗漏,为此可以进行一次性修改全部。2.解决方法 2.1双击乱码的公式,在mathType中显......