代码注释风格
2012-08-22 09:50
183 查看
package com.tshn.checkwork.base; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Date; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class ExcelReader { // 创建文件输入流 private BufferedReader reader = null; // 文件类型 private String filetype; // 文件二进制输入流 private InputStream is = null; // 当前的Sheet private int currSheet; // 当前位置 private int currPosition; // Sheet数量 private int numOfSheets; // HSSFWorkbook HSSFWorkbook workbook = null; // 设置Cell之间以空格分割 private static String EXCEL_LINE_DELIMITER = " "; // 设置最大列数 private static int MAX_EXCEL_COLUMNS = 64; // 构造函数创建一个ExcelReader public ExcelReader(String inputfile) throws IOException, Exception { // 判断参数是否为空或没有意义 if (inputfile == null || inputfile.trim().equals("")) { throw new IOException("no input file specified"); } // 取得文件名的后缀名赋值给filetype this.filetype = inputfile.substring(inputfile.lastIndexOf(".") + 1); // 设置开始行为0 currPosition = 0; // 设置当前位置为0 currSheet = 0; // 创建文件输入流 is = new FileInputStream(inputfile); // 判断文件格式 if (filetype.equalsIgnoreCase("txt")) { // 如果是txt则直接创建BufferedReader读取 reader = new BufferedReader(new InputStreamReader(is)); } else if (filetype.equalsIgnoreCase("xls")) { // 如果是Excel文件则创建HSSFWorkbook读取 workbook = new HSSFWorkbook(is); // 设置Sheet数 numOfSheets = workbook.getNumberOfSheets(); } else { throw new Exception("File Type Not Supported"); } } // 函数readLine读取文件的一行 public String readLine() throws IOException { // 如果是txt文件则通过reader读取 if (filetype.equalsIgnoreCase("txt")) { String str = reader.readLine(); // 空行则略去,直接读取下一行 while (str.trim().equals("")) { str = reader.readLine(); } return str; } // 如果是XLS文件则通过POI提供的API读取文件 else if (filetype.equalsIgnoreCase("xls")) { // 根据currSheet值获得当前的sheet HSSFSheet sheet = workbook.getSheetAt(currSheet); // 判断当前行是否到当前Sheet的结尾 if (currPosition > sheet.getLastRowNum()) { // 当前行位置清零 currPosition = 0; // 判断是否还有Sheet while (currSheet != numOfSheets - 1) { // 得到下一张Sheet sheet = workbook.getSheetAt(currSheet + 1); // 当前行数是否已经到达文件末尾 if (currPosition == sheet.getLastRowNum()) { // 当前Sheet指向下一张Sheet currSheet++; continue; } else { // 获取当前行数 int row = currPosition; currPosition++; // 读取当前行数据 return getLine(sheet, row); } } return null; } // 获取当前行数 int row = currPosition; currPosition++; // 读取当前行数据 return getLine(sheet, row); } return null; } // 函数getLine返回Sheet的一行数据 private String getLine(HSSFSheet sheet, int row) { // 根据行数取得Sheet的一行 HSSFRow rowline = sheet.getRow(row); // 创建字符创缓冲区 StringBuffer buffer = new StringBuffer(); // 获取当前行的列数 int filledColumns = rowline.getLastCellNum(); HSSFCell cell = null; // 循环遍历所有列 for (int i = 0; i < filledColumns; i++) { // 取得当前Cell cell = rowline.getCell((short) i); String cellvalue = null; if (cell != null) { // 判断当前Cell的Type switch (cell.getCellType()) { // 如果当前Cell的Type为NUMERIC case HSSFCell.CELL_TYPE_NUMERIC: { // 判断当前的cell是否为Date if (HSSFDateUtil.isCellDateFormatted(cell)) { // 如果是Date类型则,取得该Cell的Date值 Date date = cell.getDateCellValue(); // 把Date转换成本地格式的字符串 cellvalue = cell.getDateCellValue().toLocaleString(); } // 如果是纯数字 else { // 取得当前Cell的数值 Integer num = new Integer( (int) cell.getNumericCellValue()); cellvalue = String.valueOf(num); } break; } // 如果当前Cell的Type为STRIN case HSSFCell.CELL_TYPE_STRING: // 取得当前的Cell字符串 cellvalue = cell.getStringCellValue().replaceAll("'", "''"); break; // 默认的Cell值 default: cellvalue = " "; } } else { cellvalue = ""; } // 在每个字段之间插入分割符 buffer.append(cellvalue).append(EXCEL_LINE_DELIMITER); } // 以字符串返回该行的数据 return buffer.toString(); } // close函数执行流的关闭操作 public void close() { // 如果is不为空,则关闭InputSteam文件输入流 if (is != null) { try { is.close(); } catch (IOException e) { is = null; } } // 如果reader不为空则关闭BufferedReader文件输入流 if (reader != null) { try { reader.close(); } catch (IOException e) { reader = null; } } } //测试类 public static void main(String[] args) { try{ ExcelReader er=new ExcelReader("d:\\q.xls"); String line=er.readLine(); while(line != null){ System.out.println(line); line=er.readLine(); } er.close(); }catch(Exception e){ e.printStackTrace(); } } }
相关文章推荐
- 代码风格(一)注释、头文件、宏定义
- java_代码注释风格
- AndroidStudio代码风格之保留单行(one line comments)的文档注释(JavaDoc)
- [转载]如何更容易的生成Doxygen风格的注释代码
- 点评阿里JAVA手册之编程规约(命名风格、常量定义、代码风格、控制语句、注释规约)
- 利用JavaScript和正则表达式进行丰富的日期判断(给其它项目组的代码,有比较好的编程风格和注释)
- doxygen的使用(二)给代码添加javadoc风格的注释
- 自己的代码风格——代码注释
- 编程风格——五种应该避免的代码注释
- MyEclipse、Eclipse使用笔记——自定义代码注释风格
- 编程风格---代码中doxygen方式的注释写法
- java代码注释风格
- 编程风格——代码中特殊的注释技术——TODO、FIXME和XXX的用处
- 2014.02.13 重构代码之注释习惯和风格
- 如何看一些俄文注释的代码
- 机器学习实战第三章代码3-2注释
- .NET开发需要养成一种良好的注释代码习惯篇
- Android 初学入门代码注释 学习笔记001 16.03.18
- theano-xnor-net代码注释9 pylearn2/cifar10.py
- 自动提取C#类文件中的代码注释文字