java csv 复杂表头_java读csv 和excel

岳玉书
2023-12-01

以前各种包都用过,操作了无数csv 和excel。 从来没有记录过。下面写了个简单例子,不过对于excel还是建议使用poi来操作。我没有封装,只是事例而已。

import java.io.File;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.nio.charset.Charset;

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;

import jxl.Cell;

import jxl.Sheet;

import jxl.Workbook;

import jxl.read.biff.BiffException;

import com.csvreader.CsvReader;

import EmgDzdpMapping;

public class ReaderMappingFile {

/**

* 读csv格式.

* 开源jar包有opencsv, javacsv, csvObjects(可以装换成对象),csv, csvjdbc等. 此处用javacsv

* @param dir

* @return

*/

public static List readCsvFile(String dir) {

List list = new ArrayList();

List files = getFile(dir);

CsvReader reader = null;

ArrayList csvList = new ArrayList(); //用来保存数据

try {

for (File file : files) {

if (!file.getName().contains("csv"))

continue;

reader = new CsvReader(file.getAbsolutePath(),',',Charset.forName("SJIS"));

//一般用这编码读就可以了

reader.readHeaders(); // 跳过表头 如果需要表头的话,不要写这句。

while(reader.readRecord()){ //逐行读入除表头的数据

csvList.add(reader.getValues());

}

reader.close();

for(int row=0;row

for(int colum = 0; colum

System.out.println(csvList.get(row)[colum]);//取得第row行第colum列的数据

}

}

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch(Exception e) {

e.printStackTrace();

} finally {

if(reader != null) {

reader.close();

}

}

return null;

}

/**

* 不使用递归,遍历文件夹.速度没有递归效果快

*/

private static List getFile(String rootDir) {

List files = new ArrayList();

LinkedList list = new LinkedList();

File dir = new File(rootDir);

File file[] = dir.listFiles();

for (int i = 0; i < file.length; i++) {

if (file[i].isDirectory()) {

list.add(file[i]);

} else {

// System.out.println(file[i].getAbsolutePath());

files.add(file[i]);

}

}

File tmp;

while (!list.isEmpty()) {

tmp = list.removeFirst();// 循环操作,删除元素。

if (tmp.isDirectory()) {

file = tmp.listFiles();

if (file == null)

continue;

for (int i = 0; i < file.length; i++) {

if (file[i].isDirectory()) {

list.add(file[i]);

} else {

// System.out.println(file[i].getAbsolutePath());

files.add(file[i]);

}

}

} else {

// System.out.println(tmp.getAbsolutePath());

files.add(tmp);

}

}

return files;

}

/**

* jxl读excel格式.

* poi, jxl, jxls等。

* jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。其中功能相对POI比较弱一点。但jExcelAPI对中文支持非常好,API是纯Java的, 并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。 另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式

* @param dir

* @return

*/

public static List readExcelFile(String dir) {

Workbook book = null;

List files = getFile(dir);

try {

for (File file : files) {

if (!file.getName().contains("xls"))

continue;

book = Workbook.getWorkbook(file);

// 获得第一个工作表对象,暂时只处理一个sheet.

Sheet sheet = book.getSheet(0);

int columnum = sheet.getColumns(); // 得到列数

int rownum = sheet.getRows(); // 得到行数

System.out.println(columnum);

System.out.println(rownum);

for (int i = 0; i < rownum; i++) // 循环进行读写

{

for (int j = 0; j < columnum; j++) {

Cell cell1 = sheet.getCell(j, i);

String result = cell1.getContents();

System.out.print(result);

System.out.print(" \t ");

}

System.out.println();

}

}

} catch (BiffException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

if (book != null) {

book.close();

}

}

return null;

}

public static void main(String[] args) {

readCsvFile("F:\\11_maintenance\\问题\\20120104_02\\test");

//readExcelFile("F:\\11_maintenance\\问题\\20120104_02\\test");

// System.out.println(getFile("F:\\11_maintenance\\问题\\20120104_02\\dfyl111230").size());;

}

}

public class EmgDzdpMapping {

public String richpoisrc;

public Stringrichpoiid;

public String emgpoiid;

public String emgversion;

public String update;

/**A:代表add新增*/

public String deltatyp;

public EmgDzdpMapping(String richpoisrc, String richpoiid, String emgpoiid,

String emgversion, String update, String deltatyp) {

super();

this.richpoisrc = richpoisrc;

this.richpoiid = richpoiid;

this.emgpoiid = emgpoiid;

this.emgversion = emgversion;

this.update = update;

this.deltatyp = deltatyp;

}

public String getRichpoisrc() {

return richpoisrc;

}

public void setRichpoisrc(String richpoisrc) {

this.richpoisrc = richpoisrc;

}

public String getRichpoiid() {

return richpoiid;

}

public void setRichpoiid(String richpoiid) {

this.richpoiid = richpoiid;

}

public String getEmgpoiid() {

return emgpoiid;

}

public void setEmgpoiid(String emgpoiid) {

this.emgpoiid = emgpoiid;

}

public String getEmgversion() {

return emgversion;

}

public void setEmgversion(String emgversion) {

this.emgversion = emgversion;

}

public String getUpdate() {

return update;

}

public void setUpdate(String update) {

this.update = update;

}

public String getDeltatyp() {

return deltatyp;

}

public void setDeltatyp(String deltatyp) {

this.deltatyp = deltatyp;

}

}

 类似资料: