zoukankan      html  css  js  c++  java
  • 常用文件(夹)处理方法工具类

    此文章是基于  搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台

    功能:文件夹创建、文件删除、文件保存和读取、文件压缩与解压缩、excel文件打印

    一. jar包介绍 

      1. commons-io-2.5.jar

      2. jcom.jar,用于打印

      3. jacob.jar,用于打印

    二. 类文件介绍

      FileUtil.java,文件(夹)处理工具类:  

      1 package com.ims.common;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.File;
      5 import java.io.FileInputStream;
      6 import java.io.FileOutputStream;
      7 import java.io.FileReader;
      8 import java.io.IOException;
      9 import java.io.InputStream;
     10 import java.io.InputStreamReader;
     11 import java.io.OutputStream;
     12 import java.io.RandomAccessFile;
     13 import java.io.Reader;
     14 import java.nio.MappedByteBuffer;
     15 import java.nio.channels.FileChannel;
     16 import java.nio.channels.FileChannel.MapMode;
     17 import java.text.DecimalFormat;
     18 import java.util.Enumeration;
     19 import java.util.Properties;
     20 import java.util.zip.ZipEntry;
     21 import java.util.zip.ZipFile;
     22 import java.util.zip.ZipOutputStream;
     23 
     24 import jp.ne.so_net.ga2.no_ji.jcom.ReleaseManager;
     25 import jp.ne.so_net.ga2.no_ji.jcom.excel8.ExcelApplication;
     26 import jp.ne.so_net.ga2.no_ji.jcom.excel8.ExcelWorkbook;
     27 import jp.ne.so_net.ga2.no_ji.jcom.excel8.ExcelWorkbooks;
     28 import jp.ne.so_net.ga2.no_ji.jcom.excel8.ExcelWorksheet;
     29 
     30 import org.apache.commons.io.FileUtils;
     31 
     32 import com.jacob.activeX.ActiveXComponent;
     33 import com.jacob.com.ComThread;
     34 import com.jacob.com.Dispatch;
     35 import com.jacob.com.Variant;
     36 
     37 /**
     38  * 常用文件(夹)处理方法工具类
     39  */
     40 public class FileUtil {
     41     
     42     /**
     43      * 创建文件夹
     44      * @param path 文件夹路径
     45      */
     46     public static void mkdirs(String path){
     47         File folder = new File(path);
     48         if(!folder.exists()){
     49             folder.mkdirs();
     50         }
     51     }
     52     
     53     /**
     54      * 删除文件夹下的所有文件
     55      * @param rootPath 文件夹路径
     56      * @return 删除是否成功
     57      */
     58     public static boolean deleteAll(String rootPath){    
     59         try {
     60             File f = new File(rootPath);        
     61             String[] files = f.list();        
     62             //判断文件夹是否存在文件
     63             if(files != null && files.length != 0){            
     64                 for(int i = 0; i < files.length; i++) {                    
     65                     File file = new File(rootPath + files[i]);                                                
     66                         if(file.exists())                        
     67                             FileUtils.forceDelete(file);                                    
     68                 }
     69             }
     70             return true;
     71         } catch (IOException e) {
     72             e.printStackTrace();
     73             return false;
     74         }    
     75     }
     76     
     77     /**
     78      * 删除单个文件
     79      * @param fileName 要删除的文件的文件名
     80      * @return 删除是否成功
     81      */
     82     public static boolean deleteFile(String fileName) {
     83         File file = new File(fileName);
     84         // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
     85         if (file.exists() && file.isFile()) {
     86             if (file.delete()) {
     87                 return true;
     88             } else {
     89                 return false;
     90             }
     91         } else {
     92             return false;
     93         }
     94     }
     95     
     96     /** 
     97      * 保存输入流中的文件  
     98      * @param inputStream 输入流 
     99      * @param outFilePath 保存的文件路径
    100      * @return 保存是否成功  
    101      */  
    102     public static boolean saveFileFromInputStream(InputStream inputStream,String outFilePath) {       
    103         try{
    104             FileOutputStream fileOutputStream = new FileOutputStream(outFilePath);
    105             byte[] buffer =new byte[1024*1024];     
    106             int byteread = 0;    
    107             while ((byteread=inputStream.read(buffer))!=-1)   
    108             {      
    109                 fileOutputStream.write(buffer,0,byteread);   
    110                 fileOutputStream.flush();   
    111             }    
    112             fileOutputStream.close();   
    113             inputStream.close(); 
    114             return true;
    115         }catch(Exception e){
    116             return false;
    117         }
    118     }   
    119     
    120     /** 
    121      * 以行为单位读取文件,常用于读面向行的格式化文件 
    122      * @param fileName 文件的路径
    123      * @return 
    124      */  
    125     public static String readFileByLines(String fileName) {  
    126         File file = new File(fileName);  
    127         BufferedReader reader = null;  
    128         StringBuffer buf = new StringBuffer();
    129         try {   
    130             reader = new BufferedReader(new FileReader(file));  
    131             String tempString = null;    
    132             // 一次读入一行,直到读入null为文件结束  
    133             while ((tempString = reader.readLine()) != null) {  
    134                 // 显示行号  
    135                 buf.append(tempString+"</br>"); 
    136             }  
    137             reader.close();  
    138         } catch (IOException e) {  
    139             e.printStackTrace();  
    140         } finally {  
    141             if (reader != null) {  
    142                 try {  
    143                     reader.close();  
    144                 } catch (IOException e1) {  
    145                 }  
    146             }  
    147         }  
    148         return buf.toString();
    149     }  
    150       
    151     /** 
    152      * 以字符为单位读取文件,常用于读文本,数字等类型的文件 
    153      * @param fileName 文件的路径
    154      * @return
    155      */  
    156     public static String readFileByChars(String fileName) {  
    157         File file = new File(fileName);  
    158         Reader reader = null;  
    159         StringBuffer buf = new StringBuffer();
    160         try {    
    161             // 一次读一个字符  
    162             reader = new InputStreamReader(new FileInputStream(file));  
    163             int tempchar;  
    164             while ((tempchar = reader.read()) != -1) {  
    165                 // 对于windows下,
    这两个字符在一起时,表示一个换行。  
    166                 // 但如果这两个字符分开显示时,会换两次行。  
    167                 // 因此,屏蔽掉
    ,或者屏蔽
    。否则,将会多出很多空行。  
    168                 if (((char) tempchar) != '
    ') {  
    169                     buf.append((char) tempchar); 
    170                 }  
    171             }  
    172             reader.close();  
    173         } catch (Exception e) {  
    174             e.printStackTrace();  
    175         }  
    176         return buf.toString();
    177     }  
    178     
    179     /** 
    180      * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。 
    181      * MappedByteBuffer 可以在处理大文件时,提升性能 
    182      * @param fileName 文件的路径
    183      * @return
    184      */  
    185     public static byte[] readFileByBytes(String fileName) { 
    186         FileChannel fc = null; 
    187         byte[] result = null;
    188         try{  
    189             fc = new RandomAccessFile(fileName,"r").getChannel();
    190             MappedByteBuffer byteBuffer = fc.map(MapMode.READ_ONLY, 0, fc.size()).load();  
    191             result = new byte[(int)fc.size()]; 
    192             if (byteBuffer.remaining() > 0) {      
    193                 byteBuffer.get(result, 0, byteBuffer.remaining());  
    194             }         
    195         }catch (IOException e) {  
    196             e.printStackTrace();   
    197         }finally{  
    198             try{  
    199                 fc.close();  
    200             }catch (IOException e) {  
    201                 e.printStackTrace();  
    202             }  
    203         } 
    204         return result;
    205     }  
    206     
    207     /**
    208      * 读取properties配置文件
    209      * @param filePath 文件路径
    210      * @return
    211      */
    212       public static Properties loadProperty(String filePath) {
    213         Properties prop=new Properties();
    214         try {
    215             File file = new File(filePath);
    216             prop.load(new FileReader(file.getAbsolutePath()));
    217         }catch (IOException e) {
    218             e.printStackTrace();
    219         }
    220           return prop;
    221       }  
    222       
    223       /**
    224      * 转换文件大小
    225      * @param fileS 文件长度,单位byte
    226      * @return 单位B、K、M、G
    227      */
    228     public static String FormetFileSize(long fileS) {
    229         DecimalFormat df = new DecimalFormat("#.00");
    230         String fileSizeString = "";
    231         if (fileS < 1024) {
    232             fileSizeString = df.format((double) fileS) + "B";
    233         } else if (fileS < 1048576) {
    234             fileSizeString = df.format((double) fileS / 1024) + "K";
    235         } else if (fileS < 1073741824) {
    236             fileSizeString = df.format((double) fileS / 1048576) + "M";
    237         } else {
    238             fileSizeString = df.format((double) fileS / 1073741824) + "G";
    239         }
    240         return fileSizeString;
    241     }
    242     
    243       /**
    244      * 压缩多个文件成一个zip文件
    245      * @param srcfile 源文件列表
    246      * @param zipfile 压缩后的文件
    247      * @return 压缩是否成功
    248      */
    249     public static boolean zip(File[] srcfile, File zipfile) {
    250         byte[] buf = new byte[1024];
    251         try {
    252             // ZipOutputStream类:完成文件或文件夹的压缩
    253             ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));
    254             for (int i = 0; i < srcfile.length; i++) {
    255                 FileInputStream in = new FileInputStream(srcfile[i]);
    256                 out.putNextEntry(new ZipEntry(srcfile[i].getName()));
    257                 int len;
    258                 while ((len = in.read(buf)) > 0) {
    259                     out.write(buf, 0, len);
    260                 }
    261                 out.closeEntry();
    262                 in.close();
    263             }
    264             out.close();
    265             return true;
    266         } catch (Exception e) {
    267             return false;
    268         }
    269     }
    270     
    271     /**
    272      * 解压缩zip文件
    273      * @param zipfile 需要解压缩的文件
    274      * @param descDir 解压后的目标目录
    275      * @return 解压是否成功
    276      */
    277     public static boolean unZip(File zipfile, String descDir) {
    278         try {
    279             ZipFile zf = new ZipFile(zipfile);
    280             for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
    281                 ZipEntry entry = (ZipEntry) entries.nextElement();
    282                 String zipEntryName = entry.getName();
    283                 InputStream in = zf.getInputStream(entry);
    284                 OutputStream out = new FileOutputStream(descDir + zipEntryName);
    285                 byte[] buf1 = new byte[1024];
    286                 int len;
    287                 while ((len = in.read(buf1)) > 0) {
    288                     out.write(buf1, 0, len);
    289                 }
    290                 in.close();
    291                 out.close();
    292             }
    293             return true;
    294         } catch (Exception e) {
    295             return false;
    296         }
    297     }
    298     
    299     /**
    300      * 通过jcom后台打印excel文件,需要服务以进程方式启动
    301      * @param fname 文件路径
    302      * @return 打印是否成功
    303      */
    304     public static boolean printExcel4Jcom(String fname){
    305         ReleaseManager rm = new ReleaseManager();   
    306         try{   
    307             ExcelApplication excel = new ExcelApplication(rm);   
    308             ExcelWorkbooks xlBooks = excel.Workbooks();   
    309             ExcelWorkbook xlBook = xlBooks.Open(fname);   
    310             ExcelWorksheet xlSheet = excel.ActiveSheet();   
    311             xlSheet.PrintOut();   
    312             xlBook.Close(false, null, false);   
    313             excel.Quit();   
    314         }catch(Exception e){   
    315             e.printStackTrace();   
    316             return false;   
    317         }finally{   
    318             rm.release();   
    319         } 
    320         return true;   
    321     }
    322     
    323     /**
    324      * 通过jacob后台打印excel文件,需要服务以进程方式启动
    325      * @param path Excel文件路径
    326      * @return 打印是否成功
    327      */
    328     public static boolean printExcel4Jacob(String path){
    329         ComThread.InitSTA();
    330         ActiveXComponent xl = new ActiveXComponent("Excel.Application");
    331         try {
    332             // 不打开文档
    333 //            Dispatch.put(xl, "Visible", new Variant(false));
    334             Dispatch workbooks = xl.getProperty("Workbooks").toDispatch();
    335 
    336             Dispatch workbook = Dispatch.call(workbooks, "Open", path).toDispatch();
    337             // 开始打印
    338 //             Dispatch.get(workbook, "PrintOut");
    339             Dispatch.callN(workbook, "PrintOut", new Object[] { Variant.VT_MISSING, Variant.VT_MISSING, new Integer(1),
    340                     new Boolean(false), null, new Boolean(true), Variant.VT_MISSING, "" });
    341             Dispatch.call(workbook, "Close");
    342             System.out.println("打印执行成功");
    343         } catch (Exception e) {
    344             System.out.println("JACOB打印失败"+e);
    345             return false;
    346         } finally {
    347             // 始终释放资源
    348             xl.invoke("Quit", new Variant[] {});
    349             ComThread.Release();
    350         }
    351         return true;
    352     }
    353     
    354     /**
    355      * 文件属性类
    356      */
    357     public static class FileAttr{
    358         
    359         private String id;
    360         
    361         /**
    362          * 文件大小
    363          */
    364         private String fileSize;
    365         
    366         /**
    367          * 文件名称
    368          */
    369         private String fileName;
    370         
    371         
    372         public String getId() {
    373             return id;
    374         }
    375         public void setId(String id) {
    376             this.id = id;
    377         }
    378         
    379         public String getFileSize() {
    380             return fileSize;
    381         }
    382         public void setFileSize(String fileSize) {
    383             this.fileSize = fileSize;
    384         }
    385         
    386         public String getFileName() {
    387             return fileName;
    388         }
    389         public void setFileName(String fileName) {
    390             this.fileName = fileName;
    391         }
    392     }
    393 }
    View Code
  • 相关阅读:
    centos7安装nginx的两种方法
    centos7 搭建keepalived+Nginx+tomcat
    Linux下Nginx+Tomcat负载均衡和动静分离配置要点
    Tomcat结合Apache、Nginx实现高性能的web服务器
    centos7安装jdk+tomcat+nginx+mysql
    python3 密码生成器
    如何处理Tomcat日志catalina.out日志文件过大的问题
    Tomcat关闭日志catalina.out
    tomcat 启动项目时出现 ZipException: error in opening zip file
    [科普]MinGW vs MinGW-W64及其它(比较有意思,来自mingw吧)
  • 原文地址:https://www.cnblogs.com/Mr-kevin/p/5559033.html
Copyright © 2011-2022 走看看