Java檔案操作,真格是暈是我的,和其他語言或者指令碼來說,這代碼量確實大了點。希望java7以後會越來越方便
package com.tf.initdata.util;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.RandomAccessFile;import java.util.ArrayList;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;public class FileHelper {private static final Log logger = LogFactory.getLog(FileHelper.class);/** * 重新命名檔案 * */public static void renamefile(File file,String descfilename) {try{file.renameTo(new File(descfilename));}catch(Exception e){logger.error("FTP 重新命名檔案出錯.....");}}/** * 擷取檔案有多少行(文本裡面空行也會算) * */public static long getFileLines(File file) throws IOException{ RandomAccessFile raf = new RandomAccessFile(file, "r"); long size = raf.length(); if(size==0){ return 0; } raf.seek(0); long lines = 0L; int len = size < 32768 ? (int)size : 32768; long c = size/len; byte[] buffer = new byte[len]; for(int i=0;i<c;i++){ raf.read(buffer); for(int j=0;j<len;j++){ if(buffer[j] == '\n'){ lines++; } } } int rest = (int)(size%len); raf.read(buffer,0, rest); for(int j=0;j<rest;j++){ if(buffer[j] == '\n'){ lines++; } } raf.close(); return lines; } /** * 判斷該檔案最後一行是否又end標記(文本裡面空行也會算) * */public static String readLastLine(File file, String charset) throws IOException { if (!file.exists() || file.isDirectory() || !file.canRead()) { return null; } RandomAccessFile raf = null; try { raf = new RandomAccessFile(file, "r"); long len = raf.length(); if (len == 0L) { return ""; } else { long pos = len - 1; while (pos > 0) { pos--; raf.seek(pos); if (raf.readByte() == '\n') { break; } } if (pos == 0) { raf.seek(0); } byte[] bytes = new byte[(int) (len - pos)]; raf.read(bytes); if (charset == null || charset.isEmpty()) { return new String(bytes); } else { return new String(bytes, charset); } } } catch (FileNotFoundException e) { } finally { if (raf != null) { try { raf.close(); } catch (Exception e2) { } } } return null; }/** * 檔案複製 * copyflag=0 複製 copyflag=1 剪下 * */public static void copyFile(File src, File dest,int copyflag)throws Exception {BufferedInputStream reader = null;BufferedOutputStream writer = null;try {reader = new BufferedInputStream(new FileInputStream(src));writer = new BufferedOutputStream(new FileOutputStream(dest));byte[] buff = new byte[reader.available()];while ((reader.read(buff)) != -1) {writer.write(buff);}if(copyflag == 1){src.delete();}} catch (Exception e) {throw e;} finally {writer.flush();writer.close();reader.close();}if(copyflag == 1){src.delete();}}/** * 將一個目錄下所有合格檔案,剪下到另外一個檔案夾裡 * */public static void moveFileByModule(String srcDirectory,String destDirectory,String modulefilename)throws Exception{File srcFolder = new File(srcDirectory);File[] srcfiles = srcFolder.listFiles();for (File file : srcfiles){if(file.isFile()){String fileName = file.getName();if(fileName.startsWith(modulefilename)){String pathname = destDirectory+File.separator+fileName;File dest = new File(pathname);copyFile(file, dest,1);}}}}/** * 判斷指定目錄中是否包含檔案 * */public static boolean fileExists(String directory,String filename){File directFile = new File(directory);if (directFile.exists() && directFile.isDirectory()) { File[] files = directFile.listFiles(); for(File file:files) { if(filename.equals(file.getName())){ return true; } }} return false;}/** * 判斷指定目錄中是否包含某檔案名稱開頭的檔案 * */public static boolean fileModuleExists(String directory,String filename){File directFile = new File(directory);if (directFile.exists() && directFile.isDirectory()) { File[] files = directFile.listFiles(); for(File file:files) { if(file.getName().startsWith(filename)){ return true; } }} return false;}/** * 取得指定檔案名稱開頭的檔案清單 * */public static List<File> getFilesByModuleName(String directory,String filename){List<File> files = new ArrayList<File>();File directFile = new File(directory);if (directFile.exists() && directFile.isDirectory()) {File[] filest = directFile.listFiles(); for(File file:filest) { if(file.getName().startsWith(filename)){ files.add(file); } }}return files;}public static void deleteFile(File filewithPath){if(filewithPath.exists() && filewithPath.isFile()){if(filewithPath.canExecute()){filewithPath.delete();}}}/*public static void main(String args[]) throws Exception{File hygcl = new File("hygcl201203010001.txt");String endStr = readLastLine(hygcl,"");System.out.println(endStr);}*/}