java 操作csv文件

本文介绍了一个用于处理CSV文件的Java工具类,包括读取、保存、插入行和单元格等功能。该工具使用LinkedList存储数据,支持指定编码读写文件。

public class CSVUtil {
 
 private LinkedList<LinkedList<String>> m_rowList = new LinkedList<LinkedList<String>>();
 
 private String m_fileName = null;
 
 public CSVUtil(){
  
 }
 
 
 public boolean readCSV(String fileName){
  if(fileName.isEmpty()){
   return false;
  }
  
  try {
   File file = new File(fileName);
   
   InputStreamReader freader = new InputStreamReader(new FileInputStream(file), "UTF-8");
     
   BufferedReader reader = new BufferedReader(freader);
      
   String rowValues = reader.readLine();
   
   while(rowValues != null){
    String[] tokens = rowValues.split(",");
    
    LinkedList<String> row = new LinkedList<String>();
    
    for(String cell:tokens){
     row.addLast(cell);
    }
    
    m_rowList.addLast(row);
    
    rowValues = reader.readLine();
   }
   reader.close();
   
   m_fileName = fileName;
   return true;
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  return false;
 }
 
 public boolean saveAsCSV(String fileName){
  if(m_rowList.isEmpty() || fileName.isEmpty()){
   return false;
  }
  
  if(fileName.indexOf(".") == -1){
   fileName += ".csv";
  }
  if(!fileName.endsWith(".csv")){
   int endIndex = fileName.indexOf('.');
   fileName = fileName.substring(0, endIndex);
   fileName += ".csv";
  }
  
  try {
   File file = new File(fileName);
   //先检查要存储的文件是否存在,如果存在直接删除
   if(file.exists()){
    file.delete();
   }
   
   OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
   
   StringBuilder sb = new StringBuilder();
   
   for(LinkedList<String> row:m_rowList){
    for(int i=0;i<row.size()-1;i++){
     sb.append(row.get(i));
     sb.append(',');
    }
    sb.append(row.get(row.size()-1));
    sb.append("\r\n");
   }
   
   writer.write(sb.toString());
   writer.close();
   return true;
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  return false;
 }
 
 public String getCell(int row,int colum){
  if(row >= m_rowList.size() || row < 0){
   throw new IndexOutOfBoundsException(String.valueOf(row));
  }else{
   LinkedList<String> rowValues = m_rowList.get(row);
   
   if(colum<0 || colum >= rowValues.size()){
    throw new IndexOutOfBoundsException(String.valueOf(colum));
   }else{
    return rowValues.get(colum);
   }
   
  }
 }
 
 public boolean insertRow(int row,String[] values){
  if(row<0 ||row>m_rowList.size()){
   throw new IndexOutOfBoundsException(String.valueOf(row));
  }
  if(values == null){
   throw new NullPointerException();
  }
  
  LinkedList<String> rowValues = new LinkedList<String>();
  
  for(String cell:values){
   rowValues.addLast(cell);
  }
  
  m_rowList.add(row, rowValues);
  return true;
 }
 
 public boolean insertCell(int row,int colum,String value){
  if(row<0 ||row>m_rowList.size()){
   throw new IndexOutOfBoundsException(String.valueOf(row));
  }
  LinkedList<String> rowValues = m_rowList.get(row);
  if(colum<0 || colum >= rowValues.size()){
   throw new IndexOutOfBoundsException(String.valueOf(colum));
  }
  rowValues.add(colum, value);
  return true;
 }
 
 public boolean save(){
  return saveAsCSV(m_fileName);
 }
 
 public int getMaxRow(){
  return m_rowList.size();
 }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值