今天遇到一些问题,需要从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. IDEA集成java编程规范插件

    第一种:如图所示搜索 Alibaba Java Coding Guidelines(阿里巴巴) 安装完成后,重启idea,点击tools>阿里巴巴编程>编程规约扫描 即可

  2. StringUtils.join()

    org.apache.commons.lang.StringUtils; StringUtils.join(null)            = null StringUtils.join([])   ...

  3. [CSP-S模拟测试]:打扫卫生(暴力)

    题目描述 有$N$头奶牛,每头那牛都有一个标号$P_i1\leqslant Pi\leqslant M\leqslant N\leqslant 40,000$.现在$Farmer\  John$要把这 ...

  4. Wowza 4.5 修改 manager 端口号

    //编辑下面的文件, 搜索8088 有两处,改为想要的端口号即可 vim /usr/local/WowzaStreamingEngine/manager/bin/startmgr.sh // 重启服务 ...

  5. CAS-4.2.7接入REST登录认证,移动端、C/S端登录解决方案

    一.发送GET请求获取RSA公钥和JSESSIONID 请求地址:/cas/login,请求类型:GET curl -I http://cas.gfstack.geo:8080/cas/login 返 ...

  6. (转)datagridview 自定义列三步走

    本文转载自:http://blog.csdn.net/zx13525079024/article/details/4814642 我们如果想自定义实现datagridview的某列,例如是datagr ...

  7. sqlite时间类型

    SQLite分页显示:Select * From news order by id desc Limit 10 Offset 10这篇文章是根据 SQLite 官方 WIKI 里的内容翻译,如果有什么 ...

  8. 从 2017 OpenStack Days China 看国内云计算的发展现状

    目录 目录 China Runs On OpenStack 私有云正式迈入成熟阶段 混合云的前夜已经来临 China Runs On OpenStack OpenStack Days China 作为 ...

  9. shader例子

    1.水波涟漪:https://zhuanlan.zhihu.com/p/47204844 2.shaderToy转unity: https://zhuanlan.zhihu.com/p/5228708 ...

  10. It's strange. I felt less lonely when I didnt know you.

    feasible:adj. 可行的 bypass: v. 绕开,避开 eclipse: n. 月食 raw: adj. 生的 foresee:v. 预见 premier:n. 总理 ,adj: 首要的 ...