Java 获取远程ftp服务器的文件

这篇具有很好参考价值的文章主要介绍了Java 获取远程ftp服务器的文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景说明

最近做医疗的项目,涉及远程访问医院的pacs服务器获取医疗影像数据。由于医院厂商只提供了ftp的相关信息。需要用java开发脚本来自动拉取T-1的数据。

程序开发

涉及jar包

Java 获取远程ftp服务器的文件### main函数

public static void main(String[] args) throws IOException {
        // 和ftp服务器建立连接
        Ftp_by_apache ftp_by_apache = new Ftp_by_apache(Config.host, Config.username, Config.password);
        ftp_by_apache.f.setFileType(FTP.BINARY_FILE_TYPE);

        //指定需要获取的时间段  其实区间作为参数直接传递 达成jar就可以配置定时任务执行 
        String dayBegin = "2022-01-03";
        String dayEnd = "2022-01-03";

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        //获取前一天日期
        Date date = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000);
        String theLastDay = format.format(date);
        List<String> daysPath = Config.findDayPath(dayBegin, dayEnd);
        logger.info("查看日期路径是否正确===" + daysPath.get(0));
        for (String day : daysPath
        ) {
            FTPFile[] files = ftp_by_apache.f.listFiles(day);
            for (FTPFile file : files
            ) {
                if (file.isDirectory() && !file.getName().startsWith(".")) {
                    // 获取当前子目录的路径
                    String subDir = day + file.getName();
                    logger.info("当前子目录:" + subDir);
                    //遍历当前子目录
                    ftp_by_apache.f.changeWorkingDirectory(subDir);
                    FTPFile[] subFtpFiles = ftp_by_apache.f.listFiles(subDir);
                    //获取存储的子目录,并创建该当前子目录
                    String subStorePath = Config.destPath + subDir.substring(4);
                    File storeFilePath = new File(subStorePath);
                    if (!storeFilePath.exists()) {
                        // 创建多级目录
                        storeFilePath.mkdirs();
                    }
                    for (FTPFile ff : subFtpFiles
                    ) {
                        //下载文件
                        if (ff.isFile() && !ff.getName().startsWith(".")) {
                            logger.info("\t文件绝对路径: " + subStorePath + "/" + ff.getName());
                            File fileDown = new File(subStorePath + "/" + ff.getName());
                            FileOutputStream out = new FileOutputStream(fileDown);
                            ftp_by_apache.f.enterLocalPassiveMode();
                            ftp_by_apache.f.retrieveFile(
                                    new String(ff.getName().getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1),
                                    out);
                            out.close();
                        }
                    }
                }
            }
        }

        ftp_by_apache.close_connection();
    }

其中涉及的配置类

主要是涉及:根据传入的时间段区间,获取这个区间类的所有格式化日期字符串
 /**
     * 闭区间的时间段每一天获取
     *
     * @param cntDateBeg  yyyy-MM-dd
     * @param cntDateEnd  yyyy-MM-dd
     * @return <yyyyMMdd>
     */
public static List<String> findDaysStr(String cntDateBeg, String cntDateEnd) {
        List<String> list = new ArrayList<>();
        //拆分成数组
        String[] dateBegs = cntDateBeg.split("-");
        String[] dateEnds = cntDateEnd.split("-");
        //开始时间转换成时间戳
        Calendar start = Calendar.getInstance();
        start.set(Integer.valueOf(dateBegs[0]), Integer.valueOf(dateBegs[1]) - 1, Integer.valueOf(dateBegs[2]));
        Long startTIme = start.getTimeInMillis();
        //结束时间转换成时间戳
        Calendar end = Calendar.getInstance();
        end.set(Integer.valueOf(dateEnds[0]), Integer.valueOf(dateEnds[1]) - 1, Integer.valueOf(dateEnds[2]));
        Long endTime = end.getTimeInMillis();
        //定义一个一天的时间戳时长
        Long oneDay = 1000 * 60 * 60 * 24L;
        Long time = startTIme;
        //循环得出
        while (time <= endTime) {
            list.add(new SimpleDateFormat("yyyyMMdd").format(new Date(time)));
            time += oneDay;
        }
        return list;
    }

ftp client连接server端

public class Ftp_by_apache {
    FTPClient f = null;
    public Logger logger = LoggerFactory.getLogger(Ftp_by_apache.class);
    //默认构造函数
    public Ftp_by_apache(String url, String username, String password) {
        f = new FTPClient();
        //得到连接
        this.get_connection(url, username, password);
    }
    //连接服务器方法
    public void get_connection(String url, String username, String password) {
        try {
            // 设置连接超时时间
            f.setConnectTimeout(60 * 60 * 1000);
            // 设置数据超时时间
            f.enterLocalPassiveMode();
            f.setRemoteVerificationEnabled(false);
//            f.setDataTimeout(60 * 60 * 1000);
            // socket连接,设置socket连接超时时间
//            f.setSoTimeout(60 * 60 * 1000);
            //连接指定服务器,默认端口为21
            f.connect(url);
            logger.info("connect success!");
            //设置链接编码,windows主机UTF-8会乱码,需要使用GBK或gb2312编码
            f.setControlEncoding("GBK");
            //登录
            boolean login = f.login(username, password);
            if (login)
                logger.info("登录成功!");
            else
                logger.info("登录失败!");
        } catch (IOException e) {
            logger.error(e.getMessage());
        }
    }
    public void close_connection() {
        boolean logout = false;
        try {
            logout = f.logout();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        if (logout) {
            logger.info("注销成功!");
        } else {
            logger.info("注销失败!");
        }
        if (f.isConnected())
            try {
                logger.info("关闭连接!");
                f.disconnect();
            } catch (IOException e) {
                logger.error(e.getMessage());
            }
    }
}

通过上面的代码实现自动拉取ftp服务端应用目录下面的文件(也是按照其中的原始子目录路径来获取存储)。

总结

其中遇到的问题;
Java 获取远程ftp服务器的文件上面的代码在执行f.listFiles(day)程序卡住不动了。但是显示是已经与ftp的server端建立连接成功。文章来源地址https://www.toymoban.com/news/detail-509250.html

到了这里,关于Java 获取远程ftp服务器的文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java从ftp服务器上传与下载文件

    业务需要从ftp服务器上上传、下载、删除文件等功能,通过查阅资料及手动敲打代码,实现了操作ftp的基本功能,有需求的小伙伴可以看看具体的实现过程。 摘自百度百科:文件传输协议(File Transfer Protocol,FTP)是用于在 网络 上进行文件传输的一套标准协议,FTP允许用户以

    2024年02月07日
    浏览(66)
  • Java 两台服务器间使用FTP进行文件传输

    背景:需要把服务器A中的文件拷贝至服务器B中,要求使用FTP进行传输,当文件传输未完成时文件是tmp格式的,传输完毕后显示为原格式(此处是grib2)。

    2024年02月15日
    浏览(49)
  • java通过FTP跨服务器动态监听读取指定目录下文件数据

    1、文件数据在A服务器(windows)(不定期在指定目录下生成),项目应用部署在B服务器(Linux); 2、项目应用在B服务器,监听A服务器指定目录,有新生成文件,进行读取文件信息,持久化数据; 3、提供两块内容,第一安装windows FTP服务;第二项目源码,希望可以帮助到你

    2024年02月03日
    浏览(61)
  • FTP服务器安装、远程访问以及安全配置项

    一、安装ftp 1、首先,确保您的系统已经更新到最新的软件包版本。运行以下命令来更新软件包列表并安装更新的软件包: 2、安装vsftpd服务器软件包: 3、安装完成后,启动vsftpd服务并将其设置为在系统引导时自动启动: 4、(如果有防火墙)您还需要配置防火墙以允许FTP流

    2024年02月03日
    浏览(51)
  • FTP文件传输服务器

    目录 一、FTP协议两种工作模式 二、FTP数据两种传输模式 三、FTP用户分类 四、VSFTP配置案例 4.1匿名开放模式 4.2本地用户模式 4.3虚拟用户模式 五、实验总结 一、FTP 协议两种工作模式 主动模式: 1、客户端主动向ftp服务器发送控制连接,三次握手控制连接建立成功(密码认证

    2024年02月10日
    浏览(52)
  • 【Linux】FTP文件服务器

    FTP (File transfer protocol) 是TCP/IP 协议组中的协议之一。他最主要的功能是在服务器与客户端之间进行文件的传输。FTP就是实现两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载 (download)”文件。将文件从自己计算机中拷贝至远程计算机上,则称

    2024年02月10日
    浏览(60)
  • 正确解决:FTP文件夹错误,将文件复制到FTP服务器时发生错误。请检查是否有权限将文件放到该服务器上。

         FTP文件夹错误,将文件复制到FTP服务器时发生错误。请检查是否有权限将文件放到该服务器上。         谷歌了半天,全是同个答案,压根无法解决,无语到爆炸 (内心:几十篇文章,全都一个样,他们是怎么做到几十个人在那里互抄的,然后还没用):      

    2024年02月15日
    浏览(287)
  • FTP服务器与共享文件对比

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经

    2024年02月10日
    浏览(82)
  • frp内网穿透实现外网可访问的ftp(FileZillaServer)服务器(web服务器,远程桌面连接都可以)

    目录 1.总结和资源链接 2.搭建frp服务器  3.windows客户端连接到frp服务器,实现内网穿透 4.在windows本机开启ftp服务,即完成了外网可访问的ftp服务器搭建 1.总结和资源链接           本教程以系统为centos7的阿里云服务器ECS作为frp服务器,windows本地主机开启内网服务。而且

    2024年02月12日
    浏览(47)
  • c# 代码操作ftp服务器文件

    好久不见,我又回来了。给大家分享一个最近c#代码操作ftp服务器的代码示例   基础类的构造函数和属性       FtpOperation 中其他的方法 调用示例  贴了半天代码,都不太行,一会能展开,一会展不开,源码地址放下面了。 项目地址:https://github.com/yycb1994/FtpSiteManager

    2024年02月21日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包