File处理工具
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.text.DateFormat; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Date; import java.util.Enumeration; import java.util.List; import java.util.Locale; import java.util.StringTokenizer; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; /** * * @author IBM * */ public class FileUtil { public static String dirSplit = "\\";//linux windows /** * save file accroding to physical directory infomation * * @param physicalDir * physical directory * @param fname * file name of destination * @param istream * input stream of destination file * @return */ public static boolean SaveFileByPhysicalDir(String physicalPath, InputStream istream) { boolean flag = false; try { OutputStream os = new FileOutputStream(physicalPath); int readBytes = 0; byte buffer[] = new byte[8192]; while ((readBytes = istream.read(buffer, 0, 8192)) != -1) { os.write(buffer, 0, readBytes); } os.close(); flag = true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return flag; } public static boolean CreateDirectory(String dir){ File f = new File(dir); if (!f.exists()) { f.mkdirs(); } return true; } public static void saveAsFileOutputStream(String physicalPath,String content) { File file = new File(physicalPath); boolean b = file.getParentFile().isDirectory(); if(!b){ File tem = new File(file.getParent()); // tem.getParentFile().setWritable(true); tem.mkdirs();// 创建目录 } //Log.info(file.getParent()+";"+file.getParentFile().isDirectory()); FileOutputStream foutput =null; try { foutput = new FileOutputStream(physicalPath); foutput.write(content.getBytes("UTF-8")); //foutput.write(content.getBytes()); }catch(IOException ex) { ex.printStackTrace(); throw new RuntimeException(ex); }finally{ try { foutput.flush(); foutput.close(); }catch(IOException ex){ ex.printStackTrace(); throw new RuntimeException(ex); } } //Log.info("文件保存成功:"+ physicalPath); } /** * COPY文件 * @param srcFile String * @param desFile String * @return boolean */ public boolean copyToFile(String srcFile, String desFile) { File scrfile = new File(srcFile); if (scrfile.isFile() == true) { int length; FileInputStream fis = null; try { fis = new FileInputStream(scrfile); } catch (FileNotFoundException ex) { ex.printStackTrace(); } File desfile = new File(desFile); FileOutputStream fos = null; try { fos = new FileOutputStream(desfile, false); } catch (FileNotFoundException ex) { ex.printStackTrace(); } desfile = null; length = (int) scrfile.length(); byte[] b = new byte[length]; try { fis.read(b); fis.close(); fos.write(b); fos.close(); } catch (IOException e) { e.printStackTrace(); } } else { scrfile = null; return false; } scrfile = null; return true; } /** * COPY文件夹 * @param sourceDir String * @param destDir String * @return boolean */ public boolean copyDir(String sourceDir, String destDir) { File sourceFile = new File(sourceDir); String tempSource; String tempDest; String fileName; File[] files = sourceFile.listFiles(); for (int i = 0; i < files.length; i++) { fileName = files[i].getName(); tempSource = sourceDir + "/" + fileName; tempDest = destDir + "/" + fileName; if (files[i].isFile()) { copyToFile(tempSource, tempDest); } else { copyDir(tempSource, tempDest); } } sourceFile = null; return true; } /** * 删除指定目录及其中的所有内容。 * @param dir 要删除的目录 * @return 删除成功时返回true,否则返回false。 */ public boolean deleteDirectory(File dir) { File[] entries = dir.listFiles(); int sz = entries.length; for (int i = 0; i < sz; i++) { if (entries[i].isDirectory()) { if (!deleteDirectory(entries[i])) { return false; } } else { if (!entries[i].delete()) { return false; } } } if (!dir.delete()) { return false; } return true; } /** * File exist check * * @param sFileName File Name * @return boolean true - exist<br> * false - not exist */ public static boolean checkExist(String sFileName) { boolean result = false; try { File f = new File(sFileName); //if (f.exists() && f.isFile() && f.canRead()) { if (f.exists() && f.isFile()) { result = true; } else { result = false; } } catch (Exception e) { result = false; } /* return */ return result; } /** * Get File Size * * @param sFileName File Name * @return long File's size(byte) when File not exist return -1 */ public static long getSize(String sFileName) { long lSize = 0; try { File f = new File(sFileName); //exist if (f.exists()) { if (f.isFile() && f.canRead()) { lSize = f.length(); } else { lSize = -1; } //not exist } else { lSize = 0; } } catch (Exception e) { lSize = -1; } /* return */ return lSize; } /** * File Delete * * @param sFileName File Nmae * @return boolean true - Delete Success<br> * false - Delete Fail */ public static boolean deleteFromName(String sFileName) { boolean bReturn = true; try { File oFile = new File(sFileName); //exist if (oFile.exists()) { //Delete File boolean bResult = oFile.delete(); //Delete Fail if (bResult == false) { bReturn = false; } //not exist } else { } } catch (Exception e) { bReturn = false; } //return return bReturn; } /** * File Unzip * * @param sToPath Unzip Directory path * @param sZipFile Unzip File Name */ @SuppressWarnings("rawtypes") public static void releaseZip(String sToPath, String sZipFile) throws Exception { if (null == sToPath ||("").equals(sToPath.trim())) { File objZipFile = new File(sZipFile); sToPath = objZipFile.getParent(); } ZipFile zfile = new ZipFile(sZipFile); Enumeration zList = zfile.entries(); ZipEntry ze = null; byte[] buf = new byte[1024]; while (zList.hasMoreElements()) { ze = (ZipEntry) zList.nextElement(); if (ze.isDirectory()) { continue; } OutputStream os = new BufferedOutputStream( new FileOutputStream(getRealFileName(sToPath, ze.getName()))); InputStream is = new BufferedInputStream(zfile.getInputStream(ze)); int readLen = 0; while ((readLen = is.read(buf, 0, 1024)) != -1) { os.write(buf, 0, readLen); } is.close(); os.close(); } zfile.close(); } /** * getRealFileName * * @param baseDir Root Directory * @param absFileName absolute Directory File Name * @return java.io.File Return file */ @SuppressWarnings({ "rawtypes", "unchecked" }) private static File getRealFileName(String baseDir, String absFileName) throws Exception { File ret = null; List dirs = new ArrayList(); StringTokenizer st = new StringTokenizer(absFileName, System.getProperty("file.separator")); while (st.hasMoreTokens()) { dirs.add(st.nextToken()); } ret = new File(baseDir); if (dirs.size() > 1) { for (int i = 0; i < dirs.size() - 1; i++) { ret = new File(ret, (String) dirs.get(i)); } } if (!ret.exists()) { ret.mkdirs(); } ret = new File(ret, (String) dirs.get(dirs.size() - 1)); return ret; } /** * copyFile * * @param srcFile Source File * @param targetFile Target file */ @SuppressWarnings("resource") static public void copyFile(String srcFile , String targetFile) throws IOException { FileInputStream reader = new FileInputStream(srcFile); FileOutputStream writer = new FileOutputStream(targetFile); byte[] buffer = new byte [4096]; int len; try { reader = new FileInputStream(srcFile); writer = new FileOutputStream(targetFile); while((len = reader.read(buffer)) > 0) { writer.write(buffer , 0 , len); } } catch(IOException e) { throw e; } finally { if (writer != null)writer.close(); if (reader != null)reader.close(); } } /** * renameFile * * @param srcFile Source File * @param targetFile Target file */ static public void renameFile(String srcFile , String targetFile) throws IOException { try { copyFile(srcFile,targetFile); deleteFromName(srcFile); } catch(IOException e){ throw e; } } public static void write(String tivoliMsg,String logFileName) { try{ byte[] bMsg = tivoliMsg.getBytes(); FileOutputStream fOut = new FileOutputStream(logFileName, true); fOut.write(bMsg); fOut.close(); } catch(IOException e){ //throw the exception } } /** * This method is used to log the messages with timestamp,error code and the method details * @param errorCd String * @param className String * @param methodName String * @param msg String */ public static void writeLog(String logFile, String batchId, String exceptionInfo) { DateFormat df = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.JAPANESE); Object args[] = {df.format(new Date()), batchId, exceptionInfo}; String fmtMsg = MessageFormat.format("{0} : {1} : {2}", args); try { File logfile = new File(logFile); if(!logfile.exists()) { logfile.createNewFile(); } FileWriter fw = new FileWriter(logFile, true); fw.write(fmtMsg); fw.write(System.getProperty("line.separator")); fw.flush(); fw.close(); } catch(Exception e) { } } public static String readTextFile(String realPath) throws Exception { File file = new File(realPath); if (!file.exists()){ System.out.println("File not exist!"); return null; } BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(realPath),"UTF-8")); String temp = ""; String txt=""; while((temp = br.readLine()) != null){ txt+=temp; } br.close(); return txt; } }