文件操作(文件过滤,压缩,导出到excel等)
来源:互联网 发布:ipad和mac共享屏幕 编辑:程序博客网 时间:2024/05/20 00:53
文件过滤
通过实现文件名过滤器FilenameFilter,过滤指定的文件列表
//根据后缀名过滤文件列表public class FolderFilter implements FilenameFilter { private String extensions; // 后缀名 public FolderFilter(String extensions){ this.extensions = extensions; } @Override public boolean accept(File dir, String name) { return name.endsWith(extensions); }}//根据文件名过滤文件列表public static class ContainFolderFilter implements FilenameFilter { private String extensions; // 后缀名 public ContainFolderFilter(String extensions){ this.extensions = extensions; } @Override public boolean accept(File dir, String name) { return -1!=name.indexOf(extensions); }}/** * 查找文件列表 */public String[] getFileList(String dirPath,String extensions){ File file = new File(dirPath); String[] fileNameList={}; if(file.exists()) { fileNameList=file.list(new FolderFilter(extensions)); } return fileNameList;}/** * 对文件列表按照指定方式排序,并返回文件名 */public String getLastestFile(String dirPath,String extensions){ File file = new File(dirPath); String retName=""; if(file.exists()) { String[] fileNameList=file.list(new FolderFilter(extensions)); if(null!=fileNameList&&fileNameList.length>0){ Arrays.sort(fileNameList, new Comparator<String>() { @Override public int compare(String o1, String o2) { String filedate=o1.substring(o1.lastIndexOf("_")+1); filedate=filedate.substring(0, filedate.indexOf(".")); int i = Integer.parseInt(String.valueOf(filedate)); filedate=o2.substring(o2.lastIndexOf("_")+1); filedate=filedate.substring(0, filedate.indexOf(".")); int j = Integer.parseInt(String.valueOf(filedate)); if (i < j) return 1; if (i > j) return -1; return 0; } }); retName=fileNameList[0]; } } return retName;}
压缩与解压缩
/** * 功能:压缩多个文件成一个zip文件 * @param fileNameArray:源文件名列表 * @param zipName:压缩后的文件名 */public void zipFiles(String dirPath,String filePath,String[] fileNameArray, String zipName) throws Exception { File[] fileArray=new File[fileNameArray.length]; for(int i=0;i<fileArray.length;i++){ File zipfile = new File("D:\\xlsx"+File.separator+fileNameArray[i]); if(zipfile.exists()){ fileArray[i]=zipfile; } } if(!new File(dirPath).exists()){ new File(dirPath).mkdirs(); } File zipfile = new File(filePath); zipFiles(fileArray,zipfile);}/** * 功能:压缩多个文件成一个zip文件 * @param fileArray:源文件列表 * @param zipfile:压缩后的文件 */public void zipFiles(File[] fileArray, File zipfile) throws Exception { byte[] buf = new byte[2048]; if(zipfile.exists()){ Boolean isDelete=zipfile.delete(); if(!isDelete){ throw new Exception("未成功删除文件,请关闭使用该文件的所有进程或者流!!"); } } //ZipOutputStream类:完成文件或文件夹的压缩 ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile)); FileInputStream in=null; try{ for (int i = 0; i < fileArray.length; i++) { in = new FileInputStream(fileArray[i]); out.putNextEntry(new ZipEntry(fileArray[i].getName())); int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } out.closeEntry(); in.close(); } }catch (Exception e) { e.printStackTrace(); }finally { if(null!=in){ in.close(); } out.close(); }}/** * 功能:解压缩 * @param zipfile:需要解压缩的文件 * @param descDir:解压后的目标目录 */public void unZipFiles(File zipfile, String descDir) { InputStream in=null; OutputStream out=null; ZipFile zf =null; try { zf=new ZipFile(zipfile); for (Enumeration entries = zf.entries(); entries.hasMoreElements();) { ZipEntry entry = (ZipEntry) entries.nextElement(); String zipEntryName = entry.getName(); in = zf.getInputStream(entry); out = new FileOutputStream(descDir + zipEntryName); byte[] buf1 = new byte[1024]; int len; while ((len = in.read(buf1)) > 0) { out.write(buf1, 0, len); } } } catch (Exception e) { e.printStackTrace(); } finally { if(null!=in){ try { in.close(); } catch (IOException e) { e.printStackTrace(); } } if(null!=out){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } if(null!=zf){ try { zf.close(); } catch (IOException e) { e.printStackTrace(); } } }}
文件转化成byte[]
/** * 文件转byte数组 * * @param filename * @return * @throws IOException */public static byte[] fileToByteArray(String dirPath,String filename) throws IOException { File file = new File(dirPath+ File.separator +filename); if (!file.exists()) { throw new FileNotFoundException(filename); } ByteArrayOutputStream bos = new ByteArrayOutputStream((int) file.length()); BufferedInputStream in = null; try { in = new BufferedInputStream(new FileInputStream(file)); int buf_size = 2048; byte[] buffer = new byte[buf_size]; //buff用于存放循环读取的临时数据 int len = 0; while (-1 != (len = in.read(buffer, 0, buf_size))) { bos.write(buffer, 0, len); } return bos.toByteArray();//转换之后的结果 } catch (IOException e) { e.printStackTrace(); throw e; } finally { if(null!=in){ try { in.close(); } catch (IOException e) { e.printStackTrace(); } } bos.close(); }}
excel
maven配置
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version></dependency><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version></dependency>
/** * * @param title sheet名 * @param headers sheet标题 * @param dataset 要写入的数据,传入普通的java bean集合 * @param outStream 文件输出流,此参数决定了文件名及文件存储路径 * @param dataPattern 日期格式 yyyy-MM-dd-HH-mm-ss * @return Map code 0成功-1失败 mes 相关信息 */public Map<String, Object> exportExcel(String title, String[] headers, Collection<T> dataset,InputStream inputStream, OutputStream outStream, String dataPattern,Boolean is2003Excel) { // 返回值map Map<String, Object> retMap = new HashMap<String, Object>(); // 声明一个工作薄 Workbook workbook = null; //ByteArrayOutputStream byteOutStream=new ByteArrayOutputStream(); try { if (is2003Excel) { workbook = new HSSFWorkbook(inputStream); } else { workbook = new XSSFWorkbook(inputStream); } } catch (IOException e) { e.printStackTrace(); if (is2003Excel) { workbook = new HSSFWorkbook(); } else { // 这里1000是在内存中的数量,如果大于此数量时,会写到硬盘,以避免在内存导致内存溢出 //new SXSSFWorkbook(1000); workbook = new XSSFWorkbook(); } } try { /* //sheetNum 第n个sheet //MAXROW 每个表单最大允许行数 int leng=MAXROW; for(int sheetNum=0;sheetNum<=size/MAXROW;sheetNum++){ Sheet sheet = workbook.createSheet(title+"-"+sheetNum); //list中第num条数据 for(;num<=leng&&num<=size;num++){ } leng+=MAXROW; } */ // 生成一个表格 Sheet sheet = workbook.createSheet(title); // 生成一个样式 CellStyle style = workbook.createCellStyle(); // 设置这些样式 style.setFillForegroundColor(HSSFColor.SKY_BLUE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 生成一个字体 Font font = workbook.createFont(); font.setColor(HSSFColor.VIOLET.index); font.setFontHeightInPoints((short) 12); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 把字体应用到当前的样式 style.setFont(font); // 生成并设置另一个样式 CellStyle style2 = workbook.createCellStyle(); style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index); style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style2.setBorderBottom(HSSFCellStyle.BORDER_THIN); style2.setBorderLeft(HSSFCellStyle.BORDER_THIN); style2.setBorderRight(HSSFCellStyle.BORDER_THIN); style2.setBorderTop(HSSFCellStyle.BORDER_THIN); style2.setAlignment(HSSFCellStyle.ALIGN_CENTER); style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 生成另一个字体 Font font2 = workbook.createFont(); font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); // 把字体应用到当前的样式 style2.setFont(font2);// // 声明一个画图的顶级管理器// HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); // 定义注释的大小和位置,详见文档// HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5)); // 设置注释内容// comment.setString(new HSSFRichTextString("可以添加注释!")); // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容. //comment.setAuthor("科印"); // 产生表格标题行 Row row = sheet.createRow(0); for (int i = 0; i < headers.length; i++) { Cell cell = row.createCell(i); cell.setCellStyle(style); RichTextString text=null; if (is2003Excel) { text = new HSSFRichTextString(headers[i]); } else { text = new XSSFRichTextString(headers[i]); } cell.setCellValue(text); } // 遍历集合数据,产生数据行 Iterator<T> it = dataset.iterator(); int index = 0; while (it.hasNext()) {// int firstImgNo = imgNo; index++; row = sheet.createRow(index); Object t = (T) it.next(); // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值 Field[] fields = t.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { Cell cell = row.createCell(i); cell.setCellStyle(style2); Field field = fields[i]; String fieldName = field.getName(); String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); Class<? extends Object> tCls = t.getClass(); Method getMethod = tCls.getMethod(getMethodName, new Class[] {}); Object value = getMethod.invoke(t, new Object[] {}); // 判断值的类型后进行强制类型转换 String textValue = ""; if (value != null) { if (value instanceof byte[]) { // 有图片时,设置行高为80px; row.setHeightInPoints(80); // 设置图片所在列宽度为100px,注意这里单位的一个换算 //sheet.setColumnWidth(i, (short) (35.7 * 100)); sheet.setColumnWidth(i, 30 * 256); // sheet.autoSizeColumn(i); byte[] bsValue = (byte[]) value;// HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 255, (short) (firstImgNo),index, (short) (firstImgNo), index);// anchor.setAnchorType(2);// patriarch.createPicture(anchor,workbook.addPicture(bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));firstImgNo++; } else if (value instanceof Date) { Date date = (Date) value; SimpleDateFormat sdf = new SimpleDateFormat(dataPattern); textValue = sdf.format(date); } else { // 其它数据类型都当作字符串 textValue = value.toString(); } } if (textValue != null && !textValue.trim().equals("")) { int length = textValue.getBytes().length; int setLength = length * 256; if (setLength > 65280) { setLength = 65280; } sheet.setColumnWidth(i, setLength); cell.setCellValue(textValue); } else { sheet.setColumnWidth(i, 30 * 256); cell.setCellValue(""); } } } workbook.write(outStream); retMap.put("code",0); retMap.put("mes","excel写入完成"); //retMap.put("data",byteOutStream.toByteArray()); }catch (Exception e){ retMap.put("code",-1); retMap.put("mes","excel写入失败:"+e.getMessage()); }finally { try { if(inputStream!=null){ inputStream.close(); } if(outStream != null){ outStream.flush(); outStream.close(); } }catch (Exception e){ retMap.put("code",-1); retMap.put("mes","excel写入失败:"+e.getMessage()); } } return retMap;}// 是否是2003的excel,返回true是2003public static boolean is2003Excel(String filePath) { return filePath.matches("^.+\\.(?i)(xls)$");}// 是否是2007的excel,返回true是2007public static boolean is2007Excel(String filePath) { //^ 表示以...开头 //. 匹配除换行符 \n 之外的任何单字符 //+ 匹配前面的子表达式一次或多次 //根据 Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释。 //(?i)即匹配时不区分大小写 //$匹配输入字符串的结尾位置 return filePath.matches("^.+\\.(?i)(xlsx)$");}
阅读全文
0 0
- 文件操作(文件过滤,压缩,导出到excel等)
- 导出数据表到文件(excel、word等)
- 导出文件到excel
- java导出excel文件(压缩后导出)
- .net导出word、excel等文件操作类
- net导出word、excel等文件操作类
- 下载(导出)文件,如视频、Excel、word文件等
- 将数据导出到excel文件的操作类
- 文件操作——将数据导出到Excel
- datatable导出到excel文件
- Adoquery导出到excel文件
- datatable导出到excel文件
- GridView 导出到 Excel文件
- 导出到excel文件工具
- Excel导出到文件工具
- 将数据导出到excel文件的操作类(用法大全)
- 直接将数据导出到Excel文件,直接操作文件没有使用Variant
- C#导出Excel|导出数据到Excel模板文件里
- Background
- SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释
- java常见考题(中)
- 计算工时小程序
- 迁移文件反向生成
- 文件操作(文件过滤,压缩,导出到excel等)
- 第8章 Java集合—List接口
- CSS background-position用法
- 环境搭建
- MFC基于对话框最小化到托盘,并鼠标右键添加菜单以及对应菜单功能
- 第8章 Java集合—Map集合
- Android进阶---Android Webview重定向问题解决
- Day9
- 第8章 Java集合—Queue集合