File Util

/**
 * 
 */
package src.com;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;

/**
 * @author 43545520
 * 
 */
public class FileUtil {

	/**
	 * 复制目录下的文件(不包括该目录)到指定目录,会连同子目录一起复制过去。
	 * 
	 * @param targetFile
	 * @param path
	 */
	public static void copyFileFromDir(String targetDir, String path) {
		File file = new File(path);
		createFile(targetDir, false);
		if (file.isDirectory()) {
			copyFileToDir(targetDir, listFile(file));
		}
	}

	/**
	 * 复制目录下的文件(不包含该目录和子目录,只复制目录下的文件)到指定目录。
	 * 
	 * @param targetDir
	 * @param path
	 */
	public static void copyFileOnly(String targetDir, String path) {
		File file = new File(path);
		File targetFile = new File(targetDir);
		if (file.isDirectory()) {
			File[] files = file.listFiles();
			for (File subFile : files) {
				if (subFile.isFile()) {
					copyFile(targetFile, subFile);
				}
			}
		}
	}

	/**
	 * 复制目录到指定目录。targetDir是目标目录,path是源目录。 该方法会将path以及path下的文件和子目录全部复制到目标目录
	 * 
	 * @param targetDir
	 * @param path
	 */
	public static void copyDir(String targetDir, String path) {
		File targetFile = new File(targetDir);
		createFile(targetFile, false);
		File file = new File(path);
		if (targetFile.isDirectory() && file.isDirectory()) {
			copyFileToDir(targetFile.getAbsolutePath() + "/" + file.getName(),
					listFile(file));
		}
	}

	/**
	 * 复制一组文件到指定目录。targetDir是目标目录,filePath是需要复制的文件路径
	 * 
	 * @param targetDir
	 * @param filePath
	 */
	public static void copyFileToDir(String targetDir, String... filePath) {
		if (targetDir == null || "".equals(targetDir)) {
			System.out.println("参数错误,目标路径不能为空");
			return;
		}
		File targetFile = new File(targetDir);
		if (!targetFile.exists()) {
			targetFile.mkdir();
		} else {
			if (!targetFile.isDirectory()) {
				System.out.println("参数错误,目标路径指向的不是一个目录!");
				return;
			}
		}
		for (String path : filePath) {
			File file = new File(path);
			if (file.isDirectory()) {
				copyFileToDir(targetDir + "/" + file.getName(), listFile(file));
			} else {
				copyFileToDir(targetDir, file, "");
			}
		}
	}

	/**
	 * 复制文件到指定目录。targetDir是目标目录,file是源文件名,newName是重命名的名字。
	 * 
	 * @param targetFile
	 * @param file
	 * @param newName
	 */
	public static void copyFileToDir(String targetDir, File file, String newName) {
		String newFile = "";
		if (newName != null && !"".equals(newName)) {
			newFile = targetDir + "/" + newName;
		} else {
			newFile = targetDir + "/" + file.getName();
		}
		File tFile = new File(newFile);
		copyFile(tFile, file);
	}

	/**
	 * 复制文件。targetFile为目标文件,file为源文件
	 * 
	 * @param targetFile
	 * @param file
	 */
	public static void copyFile(File targetFile, File file) {
		if (targetFile.exists()) {
			System.out.println("文件" + targetFile.getAbsolutePath()
					+ "已经存在,跳过该文件!");
			return;
		} else {
			createFile(targetFile, true);
		}
		System.out.println("复制文件" + file.getAbsolutePath() + "到"
				+ targetFile.getAbsolutePath());
		try {
			InputStream is = new FileInputStream(file);
			FileOutputStream fos = new FileOutputStream(targetFile);
			byte[] buffer = new byte[1024];
			while (is.read(buffer) != -1) {
				fos.write(buffer);
			}
			is.close();
			fos.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static String[] listFile(File dir) {
		String absolutPath = dir.getAbsolutePath();
		String[] paths = dir.list();
		String[] files = new String[paths.length];
		for (int i = 0; i < paths.length; i++) {
			files[i] = absolutPath + "/" + paths[i];
		}
		return files;
	}

	public static void createFile(String path, boolean isFile) {
		createFile(new File(path), isFile);
	}

	public static void createFile(File file, boolean isFile) {
		if (!file.exists()) {
			if (!file.getParentFile().exists()) {
				createFile(file.getParentFile(), false);
			} else {
				if (isFile) {
					try {
						file.createNewFile();
					} catch (IOException e) {
						e.printStackTrace();
					}
				} else {
					file.mkdir();
				}
			}
		}
	}

	
	
	/** *//**获得控制台用户输入的信息  
     * @return  
     * @throws IOException  
     */  
    public String getInputMessage() throws IOException{   
        System.out.println("请输入您的命令∶");   
        byte buffer[]=new byte[1024];   
        int count=System.in.read(buffer);   
        char[] ch=new char[count-2];//最后两位为结束符,删去不要   
        for(int i=0;i<count-2;i++)   
            ch[i]=(char)buffer[i];   
        String str=new String(ch);   
        return str;   
    }  
    /** *//**以文件流的方式复制文件  
     * @param src 文件源目录  
     * @param dest 文件目的目录  
     * @throws IOException    
     */  
    public void copyFile(String src,String dest) throws IOException{   
        FileInputStream in=new FileInputStream(src);   
        File file=new File(dest);   
        if(!file.exists())   
            file.createNewFile();   
        FileOutputStream out=new FileOutputStream(file);   
        int c;   
        byte buffer[]=new byte[1024];   
        while((c=in.read(buffer))!=-1){   
            for(int i=0;i<c;i++)   
                out.write(buffer[i]);           
        }   
        in.close();   
        out.close();   
    }  
    public void StringBufferDemo() throws IOException{   
        File file=new File("/root/sms.log");   
        if(!file.exists())   
            file.createNewFile();   
        FileOutputStream out=new FileOutputStream(file,true);           
        for(int i=0;i<10000;i++){   
            StringBuffer sb=new StringBuffer();   
            sb.append("这是第"+i+"行:前面介绍的各种方法都不关用,为什么总是奇怪的问题 ");   
            out.write(sb.toString().getBytes("utf-8"));   
        }           
        out.close();   
    } 
    /** *//**文件重命名  
     * @param path 文件目录  
     * @param oldname  原来的文件名  
     * @param newname 新文件名  
     */  
    public void renameFile(String path,String oldname,String newname){   
        if(!oldname.equals(newname)){//新的文件名和以前文件名不同时,才有必要进行重命名   
            File oldfile=new File(path+"/"+oldname);   
            File newfile=new File(path+"/"+newname);   
            if(newfile.exists())//若在该目录下已经有一个文件和新文件名相同,则不允许重命名   
                System.out.println(newname+"已经存在!");   
            else{   
                oldfile.renameTo(newfile);   
            }    
        }            
    }  
    /** *//**转移文件目录  
     * @param filename 文件名  
     * @param oldpath 旧目录  
     * @param newpath 新目录  
     * @param cover 若新目录下存在和转移文件具有相同文件名的文件时,是否覆盖新目录下文件,cover=true将会覆盖原文件,否则不操作  
     */  
    public void changeDirectory(String filename,String oldpath,String newpath,boolean cover){   
        if(!oldpath.equals(newpath)){   
            File oldfile=new File(oldpath+"/"+filename);   
            File newfile=new File(newpath+"/"+filename);   
            if(newfile.exists()){//若在待转移目录下,已经存在待转移文件   
                if(cover)//覆盖   
                    oldfile.renameTo(newfile);   
                else  
                    System.out.println("在新目录下已经存在:"+filename);   
            }   
            else{   
                oldfile.renameTo(newfile);   
            }   
        }          
    }  
//    /** *//**从目录中读取xml文件  
//     * @param path 文件目录  
//     * @return  
//     * @throws DocumentException  
//     * @throws IOException  
//     */  
//    public Document readXml(String path) throws DocumentException, IOException{   
//        File file=new File(path);   
//        BufferedReader bufferedreader = new BufferedReader(new FileReader(file));   
//        SAXReader saxreader = new SAXReader();   
//        Document document = (Document)saxreader.read(bufferedreader);   
//        bufferedreader.close();   
//        return document;   
//    }  
    /** *//**创建文件夹  
     * @param path  目录  
     */  
    public void createDir(String path){   
        File dir=new File(path);   
        if(!dir.exists())   
            dir.mkdir();   
    } 
    
    /** *//**创建新文件  
     * @param path 目录  
     * @param filename 文件名  
     * @throws IOException  
     */  
    public void createFile(String path,String filename) throws IOException{   
        File file=new File(path+"/"+filename);   
        if(!file.exists())   
            file.createNewFile();   
    } 
    
    /** *//**删除文件  
     * @param path 目录  
     * @param filename 文件名  
     */  
    public void delFile(String path,String filename){   
        File file=new File(path+"/"+filename);   
        if(file.exists()&&file.isFile())   
            file.delete();   
    } 
    
    /** *//**递归删除文件夹  
     * @param path  
     */  
    public void delDir(String path){   
        File dir=new File(path);   
        if(dir.exists()){   
            File[] tmp=dir.listFiles();   
            for(int i=0;i<tmp.length;i++){   
                if(tmp[i].isDirectory()){   
                    delDir(path+"/"+tmp[i].getName());   
                }   
                else{   
                    tmp[i].delete();   
                }   
            }   
            dir.delete();   
        }   
    }  
    
    /** *//**读文件  
     * @param path  
     * @return  
     * @throws IOException  
     */  
    public String BufferedReaderDemo(String path) throws IOException{   
        File file=new File(path);   
        if(!file.exists()||file.isDirectory())   
            throw new FileNotFoundException();   
        BufferedReader br=new BufferedReader(new FileReader(file));   
        String temp=null;   
        StringBuffer sb=new StringBuffer();   
        temp=br.readLine();   
        while(temp!=null){   
            sb.append(temp+" ");   
            temp=br.readLine();   
        }   
        return sb.toString();   
    }  
    /** *//**读文件  
     * @param path  
     * @return  
     * @throws IOException  
     */  
    public String FileInputStreamDemo(String path) throws IOException{   
        File file=new File(path);   
        if(!file.exists()||file.isDirectory())   
            throw new FileNotFoundException();   
        FileInputStream fis=new FileInputStream(file);   
        byte[] buf = new byte[1024];   
        StringBuffer sb=new StringBuffer();   
        while((fis.read(buf))!=-1){   
            sb.append(new String(buf));       
            buf=new byte[1024];//重新生成,避免和上次读取的数据重复   
        }   
        return sb.toString();   
    }  


    
    
    /** *//**  
     * 文件输出示例  
     */  
    public void PrintStreamDemo(){   
        try {   
            FileOutputStream out=new FileOutputStream("D:/test.txt");   
            PrintStream p=new PrintStream(out);   
            for(int i=0;i<10;i++)   
                p.println("This is "+i+" line");   
        } catch (FileNotFoundException e) {   
            e.printStackTrace();   
        }   
    }
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值