读取FTP上的excel文件,并写入数据库
今天遇到一些问题,需要从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文件,并写入数据库的更多相关文章
- jsp上传excel文件并导入数据库
1,excel文件的上传 需要借助jar包:commons-fileupload-1.2.1.jar以及commons-io-1.3.2.jar 前端的html文件 <form id=" ...
- Django框架(上传Excel文件并读取)
博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py 可以 ...
- 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的路由方案,与原来的方案在使用上差别不 ...
- java上传excel文件及解析
java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...
- jmert中如何测试上传文件接口(测试上传excel文件)
第一次用jmeter这个工具测试上传接口,以前没做过这一块,导致走了很多弯路.特地把经验谢谢,怕自己以后忘记... 一,jmeter如何上传文件 jmeter 的 http requests post ...
- 2.6 利用FTP上传所有文件
利用FTP上传所有文件 import os,ftptools class UploadAll(ftptools.FtpTools): #继承上一篇写的Ftptools '''upload an ent ...
- 使用python在WEB页面上生成EXCEL文件
来自:http://blog.sina.com.cn/s/blog_5d18f85f0101bxo7.html 近日写的一个程序需要在WEB服务器上生成EXCEL文件供用户下载,研究了一下找到了以下比 ...
- c# 用OpenXmL读取.xlsx格式的Excel文件 返回DataTable
1.须要引用的dll : DocumentFormat.OpenXml.dll ---须要安装一下OpenXml再引用 WindowsBase ---直接在项目里加入引用 2.方法: /// & ...
- js上传Excel文件
一.问题 需要在项目里添加一个上传excel文件的功能,因为其他同样的后台里面有上传文件的功能,第一反应就是想着直接用.了解了一下发现它是利用bootstrap的fileinput实现的,但是我怎么都 ...
随机推荐
- [USACO08FEB]连线游戏Game of Lines
题目背景 Farmer John最近发明了一个游戏,来考验自命不凡的贝茜. 题目描述 Farmer John has challenged Bessie to the following game: ...
- C++ 对象间通信框架 V2.0 ××××××× 之(五)
类定义: ======================================================================= // MemberFuncPointer.h: ...
- 解决:@Auarowired为null
使用@Auarowired时程序报空指针.如图: 将private 更改为 public 即可
- 170815-关于Filter的知识点
Filter简介: Filter翻译为中文是过滤器的意思. Filter是JavaWeb的三大web组件之一:Servlet.Filter.Listener ...
- PCIE手札
PCIE兼容了大部分PCI总线的特性,区别在于使用串行差分总线代替了并行总线,并实现了协议分层.PCIE的带宽与LANE数量和时钟频率相关,时钟频率支持2.5G和5G,Lane支持x1/x2/x4/x ...
- VxWorks BSP开发入门
VxWorks将所有硬件平台相关的代码封装在BSP(Board Support Package)库中,从而为应用层代码提供了独立于硬件平台和体系接口的特性. BSP库中封装了一组统一的API,包括硬件 ...
- 网络流小记(EK&dinic&当前弧优化&费用流)
欢 迎 来 到 网 络 瘤 的 世 界 什么是网络流? 现在我们有一座水库,周围有n个村庄,每个村庄都需要水,所以会修水管(每个水管都有一定的容量,流过的水量不能超过容量).最终水一定会流向唯一一个废 ...
- drf 视图源码详解
目录 mixin类和Generic类 CreateModelMixin 创建 ListModelMixin - 查看多条数据 RetrieveModelMixin 获取单条数据 UpdateModel ...
- day41—JavaScript运动的停止条件
转行学开发,代码100天——2018-04-26 前面学过了JavaScript运动的两种常用情形:匀速运动与缓冲运动.在这两种运动的处理过程中最大的区别在于速度的处理和到达目标点的处理. 即本文需要 ...
- 5 centos 6.10 三节点安装apache hadoop 2.9.1
Hadoop 版本: apache hadoop 2.9.1JDK 版本: Oracle JDK1.8集群规划master(1): NN, RM, DN, NM, JHSslave1(2): DN, ...