Java File常见类小计

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);
	}*/
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值