您的位置:首页 > 编程语言 > Java开发

Java处理Excel,csv文件

2011-10-08 00:43 351 查看
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;

import com.csvreader.CsvReader;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
/**
 * CSV,Excel处理类,读写数据
 * @author ssh_kobe
 *
 */

public class DealFile {

 /**
  * @param args
  */
 public static void main(String[] args) {
  //writeExcel("test1.xls");
  long t1 = System.currentTimeMillis();
  readCSV("list.csv");
  long t2 = System.currentTimeMillis();
  System.out.println("[" + (t2-t1) + "]");
  long t3 = System.currentTimeMillis();
  readStream("list.csv");
  long t4 = System.currentTimeMillis();
  System.out.println("[" + (t4-t3) + "]");
 }
 
 /**使用流的形式,读取文件的内容
  * @param file 待读取的文件
  * @return string
  */
 public static void readStream(String file) {
  try {
   //新建缓冲流
   BufferedReader br = new BufferedReader(new FileReader(file));
   //br.readLine();
   String line = null;
   //readLine()为阻塞式方法
   while((line = br.readLine()) != null) {
     String item[] = line.split(",");
     for(String cell : item) {
      System.out.print(cell + "\t");
     }
     System.out.println();
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 
 /**读取CSV文件的内容 ,使用javacsv.jar 
  * @param file  待读取的文件
  */
 public static void readCSV(String file) {
  ArrayList<String[]> csvList = new ArrayList<String[]>();
  try {
   CsvReader reader = new CsvReader(file, ',', Charset.forName("GBK"));
   //reader.readHeaders(); // 跳过表头
    while(reader.readRecord()){ //逐行读入除表头的数据      
              csvList.add(reader.getValues());
          }              
          reader.close();
          for(int row=0; row<csvList.size(); row++){  
              for(int j=0; j<csvList.get(row).length; j++) {
               String  cell = csvList.get(row)[j]; //取得第row行第j列的数据  
               System.out.print(cell + "\t");
              }               
              System.out.println();  
          }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 
 /**读取Excel文件的内容 
  * @param file  待读取的文件 
  * @return string
  */ 
 public static String readExcel(String file){
  StringBuffer sb = new StringBuffer();
  Workbook wb = null;
  //构造Workbook(工作薄)对象
  try {
   wb = Workbook.getWorkbook(new File(file));
  } catch (BiffException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  if(wb == null) {
   return null;
  }
  //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
  Sheet[] sheets = wb.getSheets();
  if((sheets != null) && (sheets.length > 0)) {
   //对每个工作表进行循环
   for(int i=0; i<sheets.length; i++) {
    //得到当前工作表的行数
    int rowNum = sheets[i].getRows();
    for(int j=0; j<rowNum; j++) {
     //得到当前行的所有单元格
     Cell[] cells = sheets[i].getRow(j);
     if((cells != null) && (cells.length > 0)) {
      //对每个单元格进行循环
      for(int k=0; k<cells.length; k++) {
       //读取当前单元格的值
       String cell = cells[k].getContents();
       sb.append(cell+"\t");//'\t'为Tab键
      }
     }
     sb.append("\r\n");
    }
    sb.append("\r\n");
   }   
  }
  //最后关闭资源,释放内存
  wb.close();
  return sb.toString();
 }
 
 /**生成一个Excel文件 
     * @param fileName  要生成的Excel文件名 
     */ 
    public static void writeExcel(String fileName){
     WritableWorkbook wwb = null;
     //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
     try {
   wwb = Workbook.createWorkbook(new File(fileName));
  } catch (IOException e) {
   e.printStackTrace();
  }
  if(wwb != null) {
   //创建一个可写入的工作表
   //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
   WritableSheet ws = wwb.createSheet("xls1", 0);
   //下面开始添加单元格  
            for(int i=0;i<10;i++){  
                for(int j=0;j<10;j++){  
                    //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
                 Label lb = new Label(j, i, "("+(i+1)+","+(j+1)+")");
                 //将生成的单元格添加到工作表中
                 try {
      ws.addCell(lb);
     } catch (RowsExceededException e) {
      e.printStackTrace();
     } catch (WriteException e) {
      e.printStackTrace();
     }
                }
            }
            try {  
                //从内存中写入文件中  
                wwb.write();  
                //关闭资源,释放内存  
                wwb.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            } catch (WriteException e) {  
                e.printStackTrace();  
            }
  }
  System.out.println("已生成Excel表");
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: