java读csv 和excel

以前各种包都用过,操作了无数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<EmgDzdpMapping> readCsvFile(String dir) {
		List<EmgDzdpMapping> list  = new ArrayList<EmgDzdpMapping>();
		List<File> files = getFile(dir);
		CsvReader reader = null;
		ArrayList<String[]> csvList = new ArrayList<String[]>(); //用来保存数据  
		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<csvList.size();row++){
                	 for(int colum = 0; colum<csvList.get(row).length; 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<File> getFile(String rootDir) {
		List<File> files = new ArrayList<File>();
		LinkedList<File> list = new LinkedList<File>();
		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<EmgDzdpMapping> readExcelFile(String dir) {
		Workbook book = null;
		List<File> 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 String	richpoiid;
	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;
	}
	
	
}


 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值