今天遇到一些问题,需要从ftp上读取一些excel文件,并需要将excel中的数据写入到数据库,这样就可以通过管理页面查看这些数据。

我将相关工作分为三步,1、从ftp上读取相关文件,并将excel文件下载到本地。2、读取本地下载完成的excel,读取相关信息 3、将读取的信息存储到数据库中。

1、获取java操作ftp操作,首先要从maven仓库https://mvnrepository.com/artifact/commons-net/commons-net 下载相应的jar包,apache commons net 提供了相应的接口。

 

 /**
* 获取FTPClient对象
*
* @param ftpHost
* FTP主机服务器
* @param ftpPassword
* FTP 登录密码
* @param ftpUserName
* FTP登录用户名
* @param ftpPort
* FTP端口 默认为21
* @return
*/
public static FTPClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort)
{
FTPClient ftpClient = new FTPClient();
try
{
ftpClient = new FTPClient();
ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器
ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器
if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode()))
{
log.info("未连接到FTP,用户名或密码错误。");
ftpClient.disconnect();
} else
{
log.info("FTP连接成功。");
}
} catch (SocketException e)
{
e.printStackTrace();
log.info("FTP的IP地址可能错误,请正确配置。");
} catch (IOException e)
{
e.printStackTrace();
log.info("FTP的端口错误,请正确配置。");
}
return ftpClient;
}
public static void main(String [] args) throws IOException
{
String ftp_ipadd = "127.0.0.1";//ftp 地址
String ftp_user = "guest";//ftp 登录帐号
String ftp_passwd = "guest";//ftp 登录帐号密码
int ftpport = 21;//ftp端口,默认为21 FTPClient ftpClient = this.getFTPClient(ftp_ipadd, ftp_user, ftp_passwd, ftpport);
log.info(String.valueOf(ftpClient.getReplyCode()));
ftpClient.setControlEncoding("UTF-8"); // 中文支持
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//设置文件类型
ftpClient.enterLocalPassiveMode();//设置ftp 模式,有被动模式和活动模式,这里设置为被动模式
String datestr = DateUtil.getyesterdayStr();//获取前一天的日期格式为20180921
ftpClient.changeWorkingDirectory("/data/" + datestr + "/JD/");//设置ftp文件所在的目录
FTPFile [] files = ftpClient.listFiles();
log.info(files.toString());
for (int i = 0; i < files.length; i++)
{
log.info(files[i].getName());
File localFile = new File("d:\\download\\" + datestr + "\\" + files[i].getName());//设置本地下载的目录
File fileparent = localFile.getParentFile();//本地下载目录下的文件夹,如果不存在则创建
if (!fileparent.exists())
{
fileparent.mkdirs();
}
OutputStream os = new FileOutputStream(localFile);//输出到本地文件流
ftpClient.retrieveFile(files[i].getName(), os);//下载文件到本地
os.close(); }
ftpClient.logout();//关闭ftp链接
}

这里只写了demo 不做代码优化了。

2、读取本地的excel文件,java读取excel主要有两种方式jxl 和 poi, jxl只能读取2003以前的版本,但效率要高于poi,内存占用率也相对低(这里我也没有验证,导入量少基本没感觉),poi则提供了两种方式分别支持2003和2007,HSSF方式支持2003,XSSF方式支持2007。这里我使用jxl读取xls结尾的文件,使用XSSF读取xlsx结尾的文件。同样如果想使用两种方法都需要到maven仓库下载相应的jar包。

/**
* 读取excel文件
*
* @param args
*/
public static void readExcel(File filePath)
{
String extString = filePath.getName().substring(filePath.getName().lastIndexOf("."));//读取文件并判断文件类型 InputStream is = null;
try
{
is = new FileInputStream(filePath);
if (".xls".equals(extString))
{
jxlExcel(filePath);//这里执行jxl方法读取excel
} else if (".xlsx".equals(extString))
{
xssfExcel(filePath);//这里执行xssf方法读取excel
} } catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
} /**
* 使用jxl方式读取excel 2003
* @param filePath
*/
public static void jxlExcel(File filePath)
{
try
{
Workbook workbook = Workbook.getWorkbook(filePath);
Sheet sheet = workbook.getSheet(0);
int rowNums = sheet.getRows();// 获取excel总行数
int columns = sheet.getColumns(); for (int i = 1; i <= rowNums; i++)
{
for (int j = 0; j < columns; j++)
{
log.info(sheet.getCell(i, j).toString());
}
}
} catch (BiffException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} } public static void xssfExcel(File filePath)
{
try
{
XSSFWorkbook xssfworkbook = new XSSFWorkbook(new FileInputStream(filePath));
XSSFSheet xssfsheet = xssfworkbook.getSheetAt(0);
int rowNums = xssfsheet.getLastRowNum();// 当前sheet总共有多少行
int columns = xssfsheet.getRow(0).getPhysicalNumberOfCells();// 当前sheet总共有多少列 for (int i = 1; i <= rowNums; i++)
{
Row row = xssfsheet.getRow(i); for (int j = 0; j < columns; j++)
{
log.info(row.getCell(j).toString());
}
}
} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} }

3、存入数据库,这里就不多说了。

关于ftp下载和读取excle其实也是常规的操作,只是需要 认真些就可以,当然可以把相关操作封装为util文件,使用的时候直接调用会更方便些。

读取FTP上的excel文件,并写入数据库的更多相关文章

  1. jsp上传excel文件并导入数据库

    1,excel文件的上传 需要借助jar包:commons-fileupload-1.2.1.jar以及commons-io-1.3.2.jar 前端的html文件 <form id=" ...

  2. Django框架(上传Excel文件并读取)

    博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py 可以 ...

  3. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  4. java上传excel文件及解析

      java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...

  5. jmert中如何测试上传文件接口(测试上传excel文件)

    第一次用jmeter这个工具测试上传接口,以前没做过这一块,导致走了很多弯路.特地把经验谢谢,怕自己以后忘记... 一,jmeter如何上传文件 jmeter 的 http requests post ...

  6. 2.6 利用FTP上传所有文件

    利用FTP上传所有文件 import os,ftptools class UploadAll(ftptools.FtpTools): #继承上一篇写的Ftptools '''upload an ent ...

  7. 使用python在WEB页面上生成EXCEL文件

    来自:http://blog.sina.com.cn/s/blog_5d18f85f0101bxo7.html 近日写的一个程序需要在WEB服务器上生成EXCEL文件供用户下载,研究了一下找到了以下比 ...

  8. c# 用OpenXmL读取.xlsx格式的Excel文件 返回DataTable

    1.须要引用的dll :  DocumentFormat.OpenXml.dll  ---须要安装一下OpenXml再引用 WindowsBase  ---直接在项目里加入引用 2.方法: /// & ...

  9. js上传Excel文件

    一.问题 需要在项目里添加一个上传excel文件的功能,因为其他同样的后台里面有上传文件的功能,第一反应就是想着直接用.了解了一下发现它是利用bootstrap的fileinput实现的,但是我怎么都 ...

随机推荐

  1. 洛谷P1077 摆花——题解

    题目传送 题目大意:有按顺序放的n种花,相同种类的花放一起,每种花最多放ai盆,共放了m盆花,求放花方案数. 求方案个数一般有以下思路:1.搜索:2.递推/动态规划:3.贪心:4.分治... 玄学估计 ...

  2. .net api 和java平台对接技术总结

    这两天 一直和京东对接接口,我们用.net api 提供接口,对方用java调用,本来没什么问题,但是对方对数据安全要求特别严,要验签,于是噩梦开始了. 1.在传输的时候,约定传输格式: HttpWe ...

  3. Uncaught TypeError: Cannot read property 'length' of null错误怎么处理?

    Uncaught TypeError: Cannot read property 'length' of null 错误怎么处理? 1.可能是返回的datagrid数据格式有问题,比如{"t ...

  4. C++中的集合和字典

    https://blog.csdn.net/sinat_39037640/article/details/74080509

  5. 三种方式创建bean对象在springIOC容器中初始化、销毁阶段要调用的自定义方法

    1. 使用@Bean注解定义initMethod和destroyMethod 所谓initMethod和destroyMethod,是指在springIOC容器中,对于bean对象执行到初始化阶段和销 ...

  6. 分布式ID生成 - 雪花算法

    雪花算法是一种生成分布式全局唯一ID的经典算法,关于雪花算法的解读网上多如牛毛,大多抄来抄去,这里请参考耕耘的小象大神的博客ID生成器,Twitter的雪花算法(Java) 网上的教程一般存在两个问题 ...

  7. C# datatable 导出到Excel

    datatable导出到Excel /// <summary> /// 将DataTable导出为Excel文件(.xls) /// </summary> /// <pa ...

  8. 【公众号系列】SAP 主要模块及简介

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]SAP 主要模块及简介   前言部 ...

  9. 安装mysql8.0.17时候报错1251-Client does not support authentication protocol requested by server; consider upgrading MySQL client

    当mysql数据库安装时候选择的是加密密码时候,用navicat连接时候报错1521,这时候可以cmd之后登陆mysql执行下列代码就可以了 代码: mysql> alter user root ...

  10. 应用安全 - 渗透测试 - .net网站

    注入 注入 单引号检测 - 多数使用MSSQL数据库 常规注入绕过 "or''=' | 'or''=' 'or'='or' | 'or'='or'" 上传 加图片头GIF89A