`

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 io读取文件

    - Java的`MappedByteBuffer`类允许将文件映射到内存,使得文件操作如同访问内存一样快速,适合处理大型文件。 9. **大数据量文件读取策略** - **分块读取**:对于大文件,不一次性加载到内存,而是按需分块读取。...

    java io读写文件

    根据给定的信息,我们可以深入探讨Java IO操作中的文件读写技术,特别关注如何从一个文本文件中筛选数据并保存到另一个文件中。 ### Java IO读写文件基础 在Java中,进行文件读写的操作通常涉及两个核心包:`java....

    Java IO 基础操作(文件读写和移动)

    本文将深入探讨Java中的基本文件操作,包括文件的移动、读写以及文本文件的读写。 首先,让我们从文件操作开始。在Java中,我们可以使用`java.io.File`类来创建、删除、重命名或检查文件是否存在。例如,创建一个新...

    Java中文件IO流.pdf

    Java 中文件 IO 流是指 Java 语言中对文件的输入输出操作,通过定义文件流来实现文件的读写操作。文件流是指在程序中用于文件输入输出的对象, Java 中提供了多种文件流类型,包括 InputStream 和 OutputStream 两大...

    JavaIO文件操作之写入分页操作

    在这个场景下,我们关注的是Java IO在处理文件时的写入和读取操作,特别是如何进行分页操作以及如何防止出现乱码问题。下面我们将深入探讨这些知识点。 首先,让我们了解一下Java中的IO流。Java IO流分为字符流和...

    Java io的基本操作很全面的代码呀

    Java IO提供了丰富的类库,使得开发者能够处理各种类型的输入输出任务,包括文件操作、网络通信、流处理等。在这个“Java io的基本操作很全面的代码”项目中,我们可以看到一系列针对Java IO的实例,对于学习和理解...

    java 使用IO流实现文件的复制

    除了使用基本的字节流,Java还提供了更高级的`java.nio`包,它提供了一种更高效、更灵活的文件操作方式——NIO(New Input/Output)。NIO引入了通道(Channel)和缓冲区(Buffer)的概念,可以实现多线程间的零拷贝...

    javaIO操作简单例子

    Java IO(Input/Output)操作是Java编程中的基础部分...理解并熟练掌握这些类和方法对于进行高效、可靠的文件操作至关重要。在实际项目中,根据需求选择合适的流类型和操作方式,可以更好地处理各种数据输入输出场景。

    java io 流,文件读取操作

    Java IO 流、文件读取操作 Java IO 流是 Java 语言中的一种基本输入/输出机制,它提供了多种方式来处理输入/输出操作。在 Java 中,IO 流可以分为两大类:字节流和字符流。字节流主要用于处理二进制数据,而字符流...

    JAVA IO文件操作

    Java IO文件操作是Java编程中不可或缺的一部分,它允许开发者与外部设备进行数据交换,包括文件、网络、内存等。在Java中,IO流是实现这一功能的核心机制。 首先,流是一个按照顺序组织的数据集合,从起点(源)...

    java_io.rar_java 文件操作_java 读取 本地文件_java.io转动_文件操作

    本资源“java_io.rar”提供了关于如何在Java中进行文件操作的示例代码,包括读取、移动、删除和复制文件等常见任务。我们将深入探讨这些主题,以便更好地理解Java I/O API的使用。 首先,让我们从读取本地文件开始...

    Java IO应届生培训讲义

    在Java IO类库中,使用字节流复制文件是一个常见示例,其中涉及到流的嵌套使用、资源管理以及缓冲机制。例如,在使用字节流复制文件时,可以利用try-with-resources语句自动关闭资源,以及使用缓冲区来提高数据传输...

    java 文件操作及IO流

    Java 文件操作与IO流是Java编程中的核心概念,主要用于数据的读取、写入和传输。在Java中,文件操作通常涉及到`java.io`包下的类,如`File`、`FileOutputStream`、`OutputStreamWriter`和`BufferedWriter`等。下面将...

    javaIo操作的基础代码

    在Java中,IO操作涉及到文件、字节流、字符流以及管道流等多个概念。下面将详细解释这些知识点。 首先,我们来看“文件类”。在Java中,`java.io.File`类用于表示文件和目录路径名的抽象表示。它提供了创建、删除、...

    JAVA IO流文件读写大全下载

    JAVA IO流是Java语言中对输入/输出(Input/Output)操作的抽象表示。它提供了多种流机制来实现文件的读写操作。本文将对JAVA IO流文件读写的知识点进行详细的解释和分析。 1. JAVA IO流的分类 JAVA IO流可以分为两...

    java实用的io文件操作工具类,集成各种对文件操作的方法

    集成创建文件,创建目录,删除单个文件,删除单个目录,删除文件夹里内容,复制文件,复制文件夹,剪切文件,剪切文件夹等操作方法. 特上传分享

    Java IO文件操作类与复制文件实例.rar

    Java IO文件操作类与复制文件实例,有关文本编辑、FileWriter文件写入、FileReade文件读娶DataStream文件数据流、BufferedReader文件暂存器、FileViewer文件浏览器、复制文件Copy等方面的操作要领,仅供学习参考。

    Java IO知识点

    了解这些基础知识后,可以更有效地处理Java程序中的输入输出操作,无论是文件操作、网络通信还是系统间的数据交互。在开发过程中,正确选择和使用Java IO流能够提高程序的效率和灵活性,是每个Java开发者必备的技能...

Global site tag (gtag.js) - Google Analytics