前言
有时候需要通过编程来读取一些xls文件的内容,或者xml文件,读取这两种类型的文件,没什么关联,只是碰巧需要同时读取两种类型的文件。
准备
读取xls文件,可以使用Apache的一个开源项目.POI,有兴趣的自己看一下官方介绍.
使用Maven集成
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
读取xml文件,使用系统自带的库即可。
代码
读取淘宝联盟每日10点上新的xls文件
FileInputStream inputStream = new FileInputStream("/Users/aihe/Desktop/精选优质商品清单(内含优惠券)-2017-03-09.xls");
POIFSFileSystem poifsFileSystem = new POIFSFileSystem(inputStream);
Workbook workbook = new HSSFWorkbook(poifsFileSystem);
HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(0);
int rows = sheet.getPhysicalNumberOfRows();
for (int i = 1; i < rows; i++) {
HSSFRow row = sheet.getRow(i);
for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {
// TODO 对cell进行操作
HSSFCell cell = row.getCell(j);
}
}
读取XML内容,XML内容, 文件名为cat.xml
<?xml version="1.0" encoding="utf-8" ?>
<row>
<field name="catid">1</field>
<field name="catname">时尚女装</field>
<field name="catid">2</field>
<field name="catname">男装</field>
<field name="catid">3</field>
<field name="catname">母婴</field>
<field name="catid">5</field>
<field name="catname">食品</field>
<field name="catid">6</field>
<field name="catname">美妆</field>
<field name="catid">7</field>
<field name="catname">箱包</field>
...
</row>
File file = new File("cat.xml");
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
Document document = builder.parse(file);
document.getDocumentElement().normalize();
NodeList nodeList = document.getElementsByTagName("field");
LinkedList<String> catids = new LinkedList<>();
LinkedList<String> catNames = new LinkedList<>();
for (int i = 0; i < nodeList.getLength(); i++) {
if (nodeList.item(i).getNodeType() == Node.ELEMENT_NODE){
Element element = (Element) nodeList.item(i);
if (element.getAttribute("name").equals("catid")){
catIds.add(element.getTextContent());
}else if (element.getAttribute("name").equals("catname")){
catNames.add(element.getTextContent())
}
}
}
System.out.println(catIds);
System.out.println(catNames);
结果:
[1, 2, 3, 5, 6, 7, 9, 11, 13, 14, 15, 16, 17]
[时尚女装, 男装, 母婴, 食品, 美妆, 箱包, 珠宝配饰, 文体用品, 居家百货, 家装家纺, 数码家电, 户外运动, 茶叶 ]
总结
程序比较简单,只是一些简单的小例子, 做一些记录。