Java, 加载外部数据

1 txt

Java7新引入了Path, 用于取代File

Files提供了文件的基本操作, 包括基本属性, 输入输出流

Path path = Paths.get(basePath, "data.txt");

Files.lines(path, StandardCharsets.UTF_8).forEachOrdered(p -> {
    // do some action
});

2 xml

使用Dom4j

按DOM方式解析XML文件, 分成三种节点: Element, Attribue, Text

SAXReader reader = new SAXReader();
Document document = reader.read(path.toFile());

Element books = document.getRootElement();
Iterator<Element> bookIter = books.elementIterator("book");
while(bookIter.hasNext()) {
    Element book = bookIter.next();
    System.out.println(book.attributeCount());
    System.out.println(book.attributeValue("type"));

    Iterator<Element> fields = book.elementIterator();
    while(fields.hasNext()) {
        Element field = fields.next();
        System.out.println(field.getQualifiedName());
        System.out.println(field.getTextTrim());
    }
}

3 json

使用fastjson解析

Path path = Paths.get(basePath, "data.json");
JSONObject json = JSON.parseObject(new String(Files.readAllBytes(path)));

json.getJSONObject("foods").getString("pork");

4 yml

使用snakeyaml

提前定义好javabean, loadAs可以直接加载数据生成对象

Yaml yaml = new Yaml();
Map<String, Object> content = yaml.loadAs(Files.newInputStream(path), Map.class);

5 excel

HSSFWorkbook -> xls

XSSFWorkbook -> xlsx

如果2种都有可能用到, 最好封装一个通过的方法

Workbook workbook = new XSSFWorkbook(Files.newInputStream(path));
System.out.println("Sheet nums: " + workbook.getNumberOfSheets());

Sheet sheet = workbook.getSheetAt(0);
System.out.println("Row num: " + sheet.getLastRowNum());

for(int i=0; i<sheet.getLastRowNum(); i++) {
    Row row = sheet.getRow(i);
    System.out.println("Col num: " + row.getLastCellNum());

    for(int j=0; j<row.getLastCellNum(); j++) {
        Cell cell = row.getCell(j);
        System.out.println(getCellValue(cell));
    }
}

static Object getCellValue(Cell cell) {
    Object value = null;

    CellType type = cell.getCellTypeEnum();
    if(type == CellType.STRING) {
        value = cell.getStringCellValue();
    } else if(type == CellType.NUMERIC) {
        value = cell.getNumericCellValue();
    } else if(type == CellType.BOOLEAN) {
        value = cell.getBooleanCellValue();
    }
    return value;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值