JAVA Server 공통 데이터 가져오기 내보내기 구성 요소 V1.0

11577 단어 springboot
작업 중에 excel과 같은 파일을 가져오고 내보내는 업무 수요를 자주 만날 수 있다. 이런 수요는 근본적으로 보면 모두 excel에 대한 해석 처리이기 때문에 나는 특별히 이틀의 시간을 들여 일반적인 가져오기 도구 구성 요소를 써서 앞으로 이런 수요를 실현하고 효율을 높인다.현재 버전 V1.0, 소스 주소:https://github.com/CodingGyd/project/tree/master/excel-utils

1. 구성 요소 소개


V1.0 버전은 JAVA 주석과 반사 사상을 결합하여 excel의 해석 규칙 설정을 실현하였으며, 두 줄 코드로 2007 버전과 2003 버전 excel 파일에 대한 가져오기 내보내기 기능을 완성할 수 있다.저는 이 구성 요소를 유니버설 데이터 가져오기 도구 구성 요소로 만들고 싶습니다. 코드를 바꾸지 않는 전제에서 최소한의 규칙 설정을 하면 excel, txt,dbf, pdf 등 각종 형식의 데이터 파일을 효율적으로 읽거나 생성할 수 있습니다.

2. 개발 환경, 기술 프레임워크, 현재 구성 요소 버전

JDK :1.7 
 :Eclipse
SpringBoot :1.3.3.RELEASE
POI :3.15
 :V1.0

3. 구성 요소 프레임맵


4. 사용 예


1. excel 레코드행 실체 구조를 정의하고 주석으로 설정 설명을 합니다.구성 설명은 원본 주소의 주석 설명을 참고하십시오.https://github.com/CodingGyd/project/tree/master/excel-utils
package com.codinggyd.excel.example;

import java.io.Serializable;
import java.util.Date;

import com.codinggyd.excel.annotation.ExcelFieldConfig;
import com.codinggyd.excel.annotation.ExcelSheetConfig;
import com.codinggyd.excel.annotation.ExcelFieldRule;
import com.codinggyd.excel.constant.ExcelConst;
import com.codinggyd.excel.constant.JavaFieldType;

@ExcelSheetConfig(titleRowStartIndex=1,contentRowStartIndex=2,excelSuffix=ExcelConst.EXCEL_FORMAT_XLSX)
public class TestUser implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = -6106965608103174812L;

    @ExcelFieldConfig(isPrimaryKey=true,name=" ",index=0,javaType=JavaFieldType.TYPE_STRING, replaces = { @ExcelFieldRule(content = " ", replace = "83"),@ExcelFieldRule(content = " ", replace = "90") })
    private String name;

    @ExcelFieldConfig(name=" ",index=1,javaType=JavaFieldType.TYPE_INTEGER)
    private Integer age;

    @ExcelFieldConfig(name=" ",index=2,javaType=JavaFieldType.TYPE_DOUBLE)
    private Double money;

    @ExcelFieldConfig(name=" ",index=3,javaType=JavaFieldType.TYPE_DATE)
    private Date createTime;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Double getMoney() {
        return money;
    }

    public void setMoney(Double money) {
        this.money = money;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return "TestUser [name=" + name + ", age=" + age + ", money=" + money + ", createTime=" + createTime + "]";
    }

}

2. 2007 버전 xlsxExcel을 읽고 테스트 단원을 작성하고 실행합니다.
package com.codinggyd.excel.example;

import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.codinggyd.excel.constant.ExcelConst;
import com.codinggyd.excel.core.ExcelParserUtils;
import com.codinggyd.excel.core.parsexcel.bean.ResultList;
import com.codinggyd.excel.core.parsexcel.inter.IExcelRowHandler;

import junit.framework.TestCase;


/**
 * 
 * 

 *  :  TestExcelParser.java
 *  :  com.codinggyd.excel.example
 *  :  Excel 
 * 
 *  :  guoyd
 *  :  2017 12 3 
 *
 * Copyright @ 2017 Corpration Name
 * 
*/
public class TestExcelParser extends TestCase {
//ExcelParserUtils#parse 테스트(InputStream is, Class clazz, String format)
public void testParse1() throws Exception {
long start = System.currentTimeMillis();
String file = "G:/test.xlsx";
String format = ExcelConst.EXCEL_FORMAT_XLSX;
FileInputStream fis = new FileInputStream(new File(file));
ResultList result = ExcelParserUtils.parse(fis, User.class, format);
System.out.println ("오류 보고서:"+result.getMsg ();
for (User user:result) {
System.out.println(user.toString());
}
System.out.println("해석 데이터량"+result.size()+"줄, 시간 소모"+(System.currentTimeMillis()-start)+"ms");
}
}
실행 결과 캡처
3. 2007 버전 xlsxExcel 예시를 내보내고 테스트 단원을 작성하고 실행합니다.
package com.codinggyd.excel.example;

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.codinggyd.excel.constant.ExcelConst;
import com.codinggyd.excel.core.ExcelExporterUtils;

import junit.framework.TestCase;
/**
 * 
 * 

 *  :  TestExcelExporter.java
 *  :  com.codinggyd.excel.example
 *  :  Excel 
 * 
 *  :  guoyd
 *  :  2017 12 3 
 *
 * Copyright @ 2017 Corpration Name
 * 
*/
public class TestExcelExporter extends TestCase {
//ExcelExporterUtils#export 테스트(String format, Class>clazz, List data, OutputStream outputStream)
public void testExporter2() throws Exception {
long start = System.currentTimeMillis();
String file = "G:/new2.xlsx";
FileOutputStream fos = new FileOutputStream(new File(file));
String format = ExcelConst.EXCEL_FORMAT_XLSX;
List data = new ArrayList();
for (int i=0;i<100000;i++) {
User t = new User();
t.setAge(i);
t.setName("테스트"+i);
t.setMoney(1d*i);
t.setCreateTime(new Date());
data.add(t);
}
//코드 호출 생성
ExcelExporterUtils.export(format, User.class, data,fos);
System.out.println("데이터 내보내기"+ data.size () + "줄, 시간 소모"+ (System.currentTimeMillis () - start) + "ms");
}
}
실행 결과 캡처
편하지 않아요!코드를 한 줄로 간단하게 쓰면 오류 보고서를 되돌릴 수 있고 인터페이스에 사용자 정의 해석 형식을 되돌릴 수 있는 다른 방법도 정의되어 있다.원본 주석을 직접 보십시오.

5. 성능 테스트


테스트 환경: 4GB 메모리, i5-3210M 듀얼 코어 프로세서, 100만 줄 2007 excel.1차, 해석 데이터량 1003472조, 소모 시간 30285ms 2차, 해석 데이터량 1003472조, 소모 시간 30750ms 3차, 해석 데이터량 1003472조, 소모 시간 25192ms 4차, 해석 데이터량 1003472조, 소모 시간 21411ms 5차, 해석 데이터량 1003472조, 소모 시간 25531ms 6차, 해석 데이터량 1003472조, 소모 시간 20963ms 7차,분석 데이터 1003472조, 소모 시간 20388ms 8회, 분석 데이터 1003472조, 소모 시간 20026ms 9회, 분석 데이터 1003472조, 소모 시간 19644ms 10회, 분석 데이터 1003472조, 소모 시간 21206ms

좋은 웹페이지 즐겨찾기