JAVA IO对文件的操作

自己从网上找了一些,改了改其中某些方法的BUG,又添加了一些新方法,全部使用原始JDK1.6类库组合。IO对文件的操作。不知道属于什么类型的,最后还是选了原创,其实自己只是修改,学习JAVA FILE类库而已。此类不涉及高级内容,比如:不包含批量操作,不包含文件的过滤。这些高级内容下次补充。包括不包含由于文件夹无限延伸导致的listFiles OutOfMemoryError ,解决这个内容请GOOGLE。


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;


public class DirOption {

	/**文件重命名 
	 * @param path 文件目录 
	 * @param oldname  原来的文件名 
	 * @param newname 新文件名 
	 */  
	public static 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 src
	 *            文件源目录
	 * @param dest
	 *            文件目的目录
	 * @throws IOException
	 */
	public static 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();
	}

	/**
	 * 根据文件路径移动到新文件夹.如果新文件夹不存在,将被创建,注:被移动文件与新目录中已有文件名称相同时,将不被移动。不可覆盖的文件移动。
	 * @param OldDirectoryName
	 *            (原目标地址与文件名,如:C:\del\1.txt)
	 * @param NewDirectoryName
	 *            (新文件地址,如:C:\del\测试")
	 * @param IsWin
	 *            平台选择行参,如果是WINDOWS平台,参数为TRUE。LINUX/UNIX 为 FALSE。
	 * @return true
	 */
	public static boolean moveFile(String OldDirectoryName,
			String NewDirectoryName, boolean IsWin) {
		// 文件原地址
		File srcFile = new File(OldDirectoryName);
		// 判断OldDirectoryName路径是否正确
		if (!srcFile.exists()) {
			System.out.println("失败:" + OldDirectoryName + "原目录不存在或者路径错误");
			return false;
		}
		// 文件新(目标)地址
		File newSrcFile = new File(NewDirectoryName);
		String newPath = NewDirectoryName;
		// 判断NewDirectoryName路径是否存在,如果不存在,提示将被新建。
		if (!newSrcFile.exists()) {
			System.out.println("提示:" + NewDirectoryName + "目录不存,将被新建到"
					+ NewDirectoryName);
		}
		// new一个新文件夹
		File fnewpath = new File(newPath);
		// 判断文件夹是否存在
		if (!fnewpath.exists())
			fnewpath.mkdirs();
		// 将文件移到新文件里
		String newfileSrc;
		// 判断,选择创建平台
		if (IsWin) {
			newfileSrc = newPath + "\\" + srcFile.getName();
		} else {
			newfileSrc = newPath + "/" + srcFile.getName();
		}
		File newfile = new File(newfileSrc);
		srcFile.renameTo(newfile);
		return true;
	}

	
	/**根据文件路径移动到新文件夹,根据cover行参可选择覆盖原文件。
	 * @param filename 文件名 
	 * @param oldpath 旧目录 
	 * @param newpath 新目录 
	 * @param cover 若新目录下存在和转移文件具有相同文件名的文件时,是否覆盖新目录下文件,cover=true将会覆盖原文件,否则不操作 
	 */  
	public static 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);  
	        }  
	    }         
	}  
	
	
	/**
	 * 根据directoryName路径参数查看directoryName下的所有目录(不包含子目录中的目录,也就是不包含子目录).
	 * 
	 * @param directoryName
	 * @return
	 */
	public static boolean listFiles(String directoryName) {
		// 根据参数构造File对象f.
		File f = new File(directoryName);
		// 判断directoryName路径是否正确
		if (!f.exists()) {
			System.out.println("失败:" + directoryName + "目录不存在或者路径错误");
			return false;
		}
		// 使用File对象的listFiles方法取得所有目录.
		File[] s = f.listFiles();
		// 谍代打印
		for (int i = 0; i < s.length; i++) {
			System.out.println(s[i]);
		}
		return true;
	}

	/**
	 * 新建一个目录,如果此目录名存在,则不被创建.
	 * 
	 * @param directoryName
	 *            新建目录的名字.如: "C:\\JAVA\\text1".因为创建目录使用了File对象里的
	 *            mkdirs()方法,所以可以多级创建
	 *            .如果"C:\\JAVA\\text1"中JAVA目录不存在,那么JAVA目录会被创建,之后 接着创建text1目录.
	 * 
	 * @return false/true
	 */
	public static boolean newDirectory(String directoryName) {
		File f1 = new File(directoryName);
		if (f1.exists()) {
			System.out.println("添加新目录失败:" + directoryName + "目录已存在或者路径错误");
			return false;
		}
		f1.mkdirs();
		return true;
	}

	/**
	 * 新建一个文件,如果此文件名存在,则不被创建.
	 * 
	 * @param FileName
	 *            新建文件的名字与类型.如:"C:\\javaNew目录测试_xiruo.txt"
	 * @throws IOException
	 * @return false/true
	 * @throws IOException
	 */
	public static boolean newFile(String FileName) throws IOException {
		File f = new File(FileName);
		if (f.isFile()) {
			System.out.println("添加新文件失败:" + FileName + "文件已存在或者路径错误");
			return false;
		}
		f.createNewFile();
		return true;
	}

	/**
	 * 删除文件,可以是单个文件或文件夹
	 * 
	 * @param fileName
	 *            待删除的文件名
	 * @return 文件删除成功返回true,否则返回false
	 */
	public static boolean delete(String fileName) {
		File file = new File(fileName);
		if (!file.exists()) {
			System.out.println("删除文件失败:" + fileName + "文件不存在");
			return false;
		} else {
			if (file.isFile()) {
				return deleteFile(fileName);
			} else {
				return deleteDirectory(fileName);
			}
		}
	}

	/**
	 * 删除单个文件
	 * 
	 * @param fileName
	 *            被删除文件的文件名
	 * @return 单个文件删除成功返回true,否则返回false
	 */
	public static boolean deleteFile(String fileName) {
		File file = new File(fileName);
		if (file.isFile() && file.exists()) {
			file.delete();
			System.out.println("删除单个文件" + fileName + "成功!");
			return true;
		} else {
			System.out.println("删除单个文件" + fileName + "失败!");
			return false;
		}
	}

	/**
	 * 删除目录(文件夹)以及目录下的文件
	 * 
	 * @param dir
	 *            被删除目录的文件路径
	 * @return 目录删除成功返回true,否则返回false
	 */
	public static boolean deleteDirectory(String dir) {
		// 如果dir不以文件分隔符结尾,自动添加文件分隔符
		if (!dir.endsWith(File.separator)) {
			dir = dir + File.separator;
		}
		File dirFile = new File(dir);
		// 如果dir对应的文件不存在,或者不是一个目录,则退出
		if (!dirFile.exists() || !dirFile.isDirectory()) {
			System.out.println("删除目录失败" + dir + "目录不存在!");
			return false;
		}
		boolean flag = true;
		// 删除文件夹下的所有文件(包括子目录)
		File[] files = dirFile.listFiles();
		for (int i = 0; i < files.length; i++) {
			// 删除子文件
			if (files[i].isFile()) {
				flag = deleteFile(files[i].getAbsolutePath());
				if (!flag) {
					break;
				}
			}
			// 删除子目录
			else {
				flag = deleteDirectory(files[i].getAbsolutePath());
				if (!flag) {
					break;
				}
			}
		}

		if (!flag) {
			System.out.println("删除目录失败");
			return false;
		}

		// 删除当前目录
		if (dirFile.delete()) {
			System.out.println("删除目录" + dir + "成功!");
			return true;
		} else {
			System.out.println("删除目录" + dir + "失败!");
			return false;
		}
	}

	/**读文件 
	  * @param path 
	  * @return 
	  * @throws IOException 
	  */  
	 public static 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 static 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 static void main(String[] args) throws IOException {
        //test here.
	}

}

你可能感兴趣的:(java,C++,c,linux,C#)