1.连接FTP服务器

package Grib2Test;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import java.io.IOException;
import java.util.Map;

public class FTPConnect {
    private static FTPClient ftpClient;
    public static FTPClient getFTPClients(Map<String,Object> firstMap, Map<String,Object> secondMap) {
        try {
            ftpClient = new FTPClient();
            ftpClient.connect((String) firstMap.get("ftpHost"),Integer.parseInt(String.valueOf(firstMap.get("ftpPort"))));// 连接FTP服务器
            ftpClient.login((String)firstMap.get("ftpUserName"), (String)firstMap.get("ftpPassword"));// 登陆FTP服务器
            if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
                System.out.println("未连接到FTP,用户名或密码错误。 ");
                ftpClient.disconnect();
            } else {
                ftpClient.enterLocalPassiveMode();
                System.out.println("FTP连接成功。");
            }
        } catch (Exception e) {
            System.out.println("FTP的IP地址可能错误,请正确配置。      正在尝试连接另一个ftp");
            try {
                ftpClient.connect((String) secondMap.get("ftpHost"),Integer.parseInt(String.valueOf(secondMap.get("ftpPort"))));// 连接FTP服务器
                ftpClient.login((String)secondMap.get("ftpUserName"), (String)secondMap.get("ftpPassword"));
            } catch (IOException ioException) {
                System.out.println("FTP连接失败");
            }
            if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
                System.out.println("未连接到FTP,用户名或密码错误。 ");
                try {
                    ftpClient.disconnect();
                } catch (IOException ioException) {
                    System.out.println("断开连接失败");
                }
            } else {

ftpClient.enterLocalPassiveMode();
                if(ftpClient!=null)
                    System.out.println("FTP连接成功。");
                else
                    System.out.println("FTP连接失败");
            }
        }
        return ftpClient;
    }

public static void closeFTPConnection() {
        if (ftpClient != null) {
            try {
                ftpClient.disconnect();
            } catch (IOException e) {
                System.out.println("FTP连接关闭失败!");
            }
        }
    }
}

2.通过时间读取指定文件,并下载到本地

package Grib2Test;

import Grib2Test.FTPConnect;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.io.*;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class ReadFTPFileByTime {
    public FTPClient ftp;
    String storePath="C:\\sunsheen\\grib\\";
    public static void main(String[] args) throws IOException {
        ReadFTPFileByTime readFTPFileByTime = new ReadFTPFileByTime();
        readFTPFileByTime.readByTime("2022-01-04 16:30:02","TAIR");
    }

/**
     * 根据传入的日期,读取文件内容
     *
     * @throws ParseException
     */
    public String readByTime(String Time,String element) throws IOException {
        Map<String, Object> firstMap = new HashMap<>();
        firstMap.put("ftpHost", "10.155.96.30");
        firstMap.put("ftpPort", 21);
        firstMap.put("ftpUserName", "ftp_nafp");
        firstMap.put("ftpPassword", "ftp_nafp123");

Map<String, Object> secondMap = new HashMap<>();
        secondMap.put("ftpHost", "10.155.96.30");
        secondMap.put("ftpPort", 22);
        secondMap.put("ftpUserName", "ftp_nafp");
        secondMap.put("ftpPassword", "ftp_nafp123");

//        FTPClient ftpClient;
        ftp = FTPConnect.getFTPClients(firstMap, secondMap);

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date now = null;
        try {
            now = sdf.parse(Time);
        } catch (ParseException e) {
            System.out.println("时间格式错误");
        }
        String worldTime = sdf.format(now);
        String timeFile = worldTime.split(" ")[0];
        timeFile=timeFile.replaceAll("-","");
        String hour = worldTime.split(" ")[1].split(":")[0];

StringBuffer filenames = new StringBuffer();
//        List  fileInfo = new ArrayList<>();
        String directory =timeFile;//下载目录20220104
        //更换目录到当前目录
        this.ftp.changeWorkingDirectory(directory);
        ftp.enterLocalPassiveMode();
        FTPFile[] files = this.ftp.listFiles();
        if (files != null) {
        }
        for (int i = 0; i < files.length; i++) {
            if (files[i].isFile()) {
                String n = new String(files[i].getName().getBytes("gbk"), "utf-8");
                if (i == files.length - 1) {
                    filenames.append(n + "," + storePath);
                } else {
                    filenames.append(n + ",");
                }
            }
        }
        String fileNames = filenames.toString();
        List<Object> fileInfo=Arrays.asList(fileNames.split(","));
        System.out.println(fileInfo.size());
        String timeString=timeFile+hour+".GRB2";//2022010416.GRB2
        String file = null;
        for (int i = 0; i < fileInfo.size(); i++) {
            file= (String) fileInfo.get(i);
            if (file.contains(timeString)&&file.contains(element)){
                System.out.println(file);
                File f = new File(storePath+file);
                if(!f.exists()){
                    System.out.println("文件不存在下载");
                    downFile(ftp,file, file, storePath);
                }else{
                    System.out.println("文件存在,返回路径");
                }
                break;
            }
        }
        FTPConnect.closeFTPConnection();
//        System.out.println("downLoad:"+storePath+file);
        //C:\sunsheen\gribZ_NAFP_C_BABJ_20220104080816_P_HRCLDAS_RT_CHN-BEHK_0P01_HOR-TAIR-2022010416.GRB2
        return  storePath+file;
    }

/**
     * 下载方法
     *
     * @param ftpClient   FTPClient对象
     * @param newFileName 新文件名
     * @param fileName    原文件名
     * @param downUrl     下载路径
     * @return
     * @throws IOException
     */
    public static boolean downFile(FTPClient ftpClient, String newFileName, String fileName, String downUrl) throws IOException {
        boolean isTrue = false;
        OutputStream os = null;

File localFile = new File(downUrl + "/" + newFileName);
        System.out.println("本地下载路径:"+localFile);
        os = new FileOutputStream(localFile);
        isTrue = ftpClient.retrieveFile(new String(fileName.getBytes(), "ISO-8859-1"), os);
        os.close();
        return isTrue;
    }

}
3.通过NetcdfFile读取解决GRB2文件,获取数据,然后筛选经纬度获取指定区域数据

package Grib2Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import ucar.nc2.NetcdfFile;

public class ReadGribDataByNetcdfFile {
    public ReadGribDataByNetcdfFile() {
    }

public Map<String, Object> ReadFileQAIR(String path) {
        NetcdfFile ncf = null;
        HashMap dataMap = new HashMap();

try {
            ncf = NetcdfFile.open(path);
            float[][] qAIR = (float[][]) ncf
                    .findVariable("Specific_humidity_height_above_ground")
                    .read().reduce(0).reduce(0).copyToNDJavaArray();
//            System.out.println("qAIR"+ Arrays.deepToString(qAIR));
            dataMap.put("lon", ncf.findVariable("lon").read()
                    .copyTo1DJavaArray());
            dataMap.put("lat", ncf.findVariable("lat").read()
                    .copyTo1DJavaArray());
            dataMap.put("qAIR", qAIR);
        } catch (Exception e) {
            e.printStackTrace();
        }

return dataMap;
    }

public Map<String, Object> ReadFileTAIR(String path) {
        NetcdfFile ncf = null;
        HashMap dataMap = new HashMap();

try {
            ncf = NetcdfFile.open(path);
            float[][] tAIR = (float[][]) ncf
                    .findVariable("Temperature_height_above_ground")
                    .read().reduce(0).reduce(0).copyToNDJavaArray();
//            System.out.println("qAIR"+ Arrays.deepToString(tAIR));
            dataMap.put("lon", ncf.findVariable("lon").read()
                    .copyTo1DJavaArray());
            dataMap.put("lat", ncf.findVariable("lat").read()
                    .copyTo1DJavaArray());
            dataMap.put("tAIR", tAIR);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dataMap;
    }

public Map<String, Object> ReadFileUWIN(String path) {
        NetcdfFile ncf = null;
        HashMap dataMap = new HashMap();

try {
            ncf = NetcdfFile.open(path);
            float[][] uWIN = (float[][]) ncf
                    .findVariable("u-component_of_wind_height_above_ground")
                    .read().reduce(0).reduce(0).copyToNDJavaArray();
//            System.out.println("qAIR"+ Arrays.deepToString(uWIN));
            dataMap.put("lon", ncf.findVariable("lon").read()
                    .copyTo1DJavaArray());
            dataMap.put("lat", ncf.findVariable("lat").read()
                    .copyTo1DJavaArray());
            dataMap.put("uWIN", uWIN);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dataMap;
    }

public Map<String, Object> ReadFileVWIN(String path) {
        NetcdfFile ncf = null;
        HashMap dataMap = new HashMap();

try {
            ncf = NetcdfFile.open(path);
            float[][] vWIN = (float[][]) ncf
                    .findVariable("v-component_of_wind_height_above_ground")
                    .read().reduce(0).reduce(0).copyToNDJavaArray();
//            System.out.println("qAIR"+ Arrays.deepToString(vWIN));//9999
            dataMap.put("lon", ncf.findVariable("lon").read()
                    .copyTo1DJavaArray());
            dataMap.put("lat", ncf.findVariable("lat").read()
                    .copyTo1DJavaArray());
            dataMap.put("vWIN", vWIN);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dataMap;
    }

public Map<String, Object> ReadFileWIND(String path) {
        NetcdfFile ncf = null;
        HashMap dataMap = new HashMap();

try {
            ncf = NetcdfFile.open(path);
            float[][] winD = (float[][]) ncf
                    .findVariable("Wind_speed_height_above_ground")
                    .read().reduce(0).reduce(0).copyToNDJavaArray();
//            System.out.println("qAIR"+ Arrays.deepToString(winD));//9999
            dataMap.put("lon", ncf.findVariable("lon").read()
                    .copyTo1DJavaArray());
            dataMap.put("lat", ncf.findVariable("lat").read()
                    .copyTo1DJavaArray());
            dataMap.put("winD", winD);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dataMap;
    }

public Map<String, Object> ReadFilePRE(String path) {
        NetcdfFile ncf = null;
        HashMap dataMap = new HashMap();

try {
            ncf = NetcdfFile.open(path);
            dataMap.put("lon", ncf.findVariable("lon").read()
                    .copyTo1DJavaArray());
            dataMap.put("lat", ncf.findVariable("lat").read()
                    .copyTo1DJavaArray());
            float[][] pre = (float[][]) ncf
                    .findVariable("Total_precipitation_surface")
                    .read().reduce(0).copyToNDJavaArray();
            System.out.println("qAIR"+ Arrays.deepToString(pre));
//            dataMap.put("pre", pre);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dataMap;
    }

public ArrayList<ArrayList<Integer>> lonAndLatFilter(float[] lonArray,
                                                         float[] latArray) {
        ArrayList<ArrayList<Integer>> lonAndLatFilterArray = new ArrayList();
        ArrayList<Integer> lonFilterArray = new ArrayList();
        ArrayList<Integer> latFilterArray = new ArrayList();

int j;
        for (j = 0; j < lonArray.length; ++j) {
            if (108.55D <= (double) lonArray[j]
                    && (double) lonArray[j] <= 111.15D) {
                lonFilterArray.add(j);
            }
        }

for (j = 0; j < latArray.length; ++j) {
            if (18.1D <= (double) latArray[j] && (double) latArray[j] <= 20.25D) {
                latFilterArray.add(j);
            }
        }

lonAndLatFilterArray.add(0, lonFilterArray);
        lonAndLatFilterArray.add(1, latFilterArray);
        return lonAndLatFilterArray;
    }
}

注:下载到本地读取GRB2文件时,需要注意读取格式

float[][] winD = (float[][]) ncf .findVariable("Wind_speed_height_above_ground") .read().reduce(0).reduce(0).copyToNDJavaArray();
dataMap.put("lon", ncf.findVariable("lon").read().copyTo1DJavaArray());
dataMap.put("lat", ncf.findVariable("lat").read().copyTo1DJavaArray());

需要用特殊的软件打开查看GRB2文件

FTP服务器获取文件,并解析GRB2文件获取数据相关推荐

  1. 自动备份网站和数据库打包并上传FTP服务器并删除前30天文件

    自动备份网站和数据库打包并上传FTP服务器并删除前30天文件 @echo off<nul 3>nul Set nowdate=%date:~0,10% set nowdate=%nowda ...

  2. 第六章、epub文件处理 -- 解析container文件与.opf文件

    2019独角兽企业重金招聘Python工程师标准>>> 第六章.epub文件处理 -- 解析container文件与.opf文件 这一章我们会接着第三章结尾介绍的FBReaderAp ...

  3. (C++)将数据库文件导出XML文件以及解析XML文件生成数据库文件的处理方法

    将数据库文件导出XML文件以及解析XML文件生成数据库文件的处理方法 思路:将数据库所有要导出的信息通过sql语句得到,存储到结构体中,然后将结构体的内容通过自定义的xml格式导出. 此方法使用的是T ...

  4. 如何反编译apk文件并解析.class文件查看Java源代码

    如何反编译apk文件并解析.class文件查看Java源代码 前期工作:先准备好反编译需要用到的工具:下载链接. 1.把下载好的工具解压,得到下面这三个文件 2.配置环境变量到path(apktool ...

  5. ftp服务器 文件目录,如何列出ftp服务器上的目录中的文件?

    我找到了一个能够列出ftp服务器根目录下的文件和目录的解决方案.但我也需要目录的内容.我需要修改这个方法吗? internal void ListFilesOnServer() { try { Ftp ...

  6. 简单php web ftp服务器,php 上传文件到ftp服务器的简单示例(单文件)

    搜索热词 PHP上传单个文件到ftp服务器的演示范例,感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编来看看吧. 经测试代码如下: /** * 上传文件到ftp服务器 * * @param ...

  7. FTP服务器:解决无法上传文件到FTP服务器的问题(二)

    问题:在上传过程中,出现"打开ftp服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹"错误. 解决方法:打开控制面板->网络和Internet 点击 Internet ...

  8. Android向本地写入一个XML文件和解析XML文件

    在网络存储过程中有很多时候会遇到XML文件解析和使用XML保存一些信息,解析XML文件用的比较多的方法是pull解析和SAX解析,但是我一般只用pull解析,下面就向cd卡写入一个XML文件,然后再使 ...

  9. php解析压缩包csv文件,php解析csv文件

    public function actionImport() { //post请求过来的 $fileName = $_FILES['file']['name']; $fileTmpName = $_F ...

最新文章

  1. java servlet filter_Java的Servlet、Filter、Interceptor、Listener
  2. Tungsten Fabric SDN — Service Chain — 高级特性
  3. 在Python中使用XGBoost
  4. 【互联网今日大事儿】陌陌今日上市马云变亚洲首富!
  5. 不用写一行代码,这款 高颜值 可视化神器,值得try一try!
  6. php autoload用法,php自动加载__autoload()函数用法
  7. vc给exe更改图标
  8. 油画作品欣赏|奥地利艺术家克里姆特
  9. matlab 指定路径保存图片_关于matlab图片保存方式
  10. 九度OJ 1340:小A的计算器 (进制转换)
  11. 【转】Chrome与Chromedriver版本对应表(最新)【附下载链接】
  12. android设备间实现无线投屏
  13. MacOs提升效率必备软件
  14. 最好用的音轨分离软件spleeter:处理一首歌仅几秒,上线一周收获2.4k星 | 附实测...
  15. 会员运营是什么?会员运营体系有哪些类别?
  16. H3C 双线路 nqa 联动
  17. 九宫格拼图 | 8Puzzle | C/C++实现
  18. APP设计说明书概述
  19. 姓杨取名:杨姓女孩文雅有寓意的名字,真的是万里挑一
  20. 数字英文唯一_福特高光归来!双喷+同级唯一8AT,福克斯“猎装”大杀四方

热门文章

  1. 中科院大牛博士是如何进行文献检索和阅读(好习惯受益终生)
  2. 数独算法c语言,数独求解算法C.
  3. 06Java学习笔记——运算符
  4. 结对编程——经验教训总结
  5. 软件行业的税收优惠政策包含哪些
  6. 基于QT的C++的坦克大战游戏
  7. 股票期货化数据文档大全覆盖国内6大易的历史数据和实时行情
  8. pc端js根据图片url进行下载单张图片以及批量下载到本地
  9. Xilinx Zynq ZynqMP boot模式
  10. 如何解决layui弹出层闪退的问题