Lesson_23_Note_java IO系统(中)

package Lesson_23;
/**************************************************************
 * 							2013.3.26
 * 				 	       java IO系统(中)
 * 					  	   @author Gavin
 **************************************************************/
/*****************************课堂内容******************************
 * 1、字符流
 * 		--->FileInputStram类和FileOutputStream类虽然可以高效率地读/写文件,
 * 		但对于Unicode编码的文件,使用它们有可能出现乱码
 * 		--->字符流涉及一下4个类
 * 		FileReader类和FileWriter类      BufferedReader类和BufferedWriter类
 * 2、FileReader类称为文件读取流,允许以字符流的形式对文件进行读操作,其构造方法
 * 			有3种重载方式,以下是常用的几种
 * 		--->FileReader(File file)  throws FileNotFoundException
 * 			使用File对象创建文件读取流对象,如果文件打开失败,将抛出异常
 * 		--->FileReader(String name)  throws FileNotFoundException
 * 			使用文件名或路径创建文件读取流对象,如果文件打开失败,将抛出异常
 * 	**该类将从文件中逐个地读取字符,效率比较低下,因此一般将该类对象包装到缓冲流中进行操作
 * 3、BufferedReader类主要为字符流提供缓冲,以提高效率,其构造方法有2种重载方式,以下是常用的几种
 * 		--->BufferedReader(Reader in) 	将字符读取流对象包装成缓冲读取流对象
 * 4、BufferedReader类常用的方法
 * 		--->String readLine()  throws IOException
 *		 从缓冲读取流中读取一行字符,以字符串的形式返回,有可能抛异常,必须捕捉
 *		--->void close()  throws IOException
 *		关闭流对象,有可能抛异常,必须捕捉
 * 	5、FileWriter类称为文件写入流,以字符流的形式对文件进行写操作,
 * 		其构造方法有5种重载,以下是常用的几种:
 * 		--->FileWriter(File file)	throws IOException
 * 		使用File对象创建文件写入流对象,如果文件打开失败,将抛出异常,必须捕捉
 * 		--->FileWriter(File file, boolean append)  throws IOException
 * 		使用File对象创建文件写入流对象,并由参数append指定是否追加,异常情况同上
 * 		--->FileWriter(String name)  throws IOException
 *		 直接使用文件名或路径创建文件写入流对象,异常情况同上
 *		--->FileWriter(String name, boolean append)  throws IOException
 *		直接使用文件名或路径创建文件写入流对象,并由参数append指定是否追加,异常情况同上
 *	**与FileReader类相似,FileWriter类同样需要使用缓冲流进行包装
 * 6、BufferedWriter类可以为FileWriter类提供缓冲,其构造方法有2种重载方式,以下是常用的:
 * 		--->BufferedWriter(Writer out) 将字符写入流对象包装成缓冲写入流对象
 * 7、BufferedWriter类常用的方法:
 * 		--->void write(String str) throws IOException
 * 			将一行字符串写入到缓冲写入流中,有可能抛异常,必须捕捉
 * 		--->void newLine()  throws IOException
 * 			将一个回车换行符写入到文件中,从而达到换行的效果,有可能抛异常,必须捕捉
 *******************************************************************/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;

public class FileInput {
	public static void main(String[] args) throws Exception {
		File file=new File("readme.txt");
//		readFile(file);
//		File file2=new File("E:\\readme.txt");
//		writeFile(file2);
		
		//复制-->两个方法所用时间差别很大!!!
//		fileCopy(new File("E:\\朴树 - 生如夏花.mp3"), new File("E:\\生如夏花2.mp3"));
		fileCopy2(new File("E:\\朴树 - 生如夏花.mp3"), new File("E:\\生如夏花3.mp3"));
		
//		fileReader(file);
//		fileWriter(new File("你好吗?.txt"));
	}
	
	public static void readFile(File file) throws Exception{
		//读入数据
		FileInputStream fin=new FileInputStream(file);//这个流关联到文件
		int n=-1;
		while((n=fin.read())!=-1){//不停地读取内容,知道文件末尾(-1)为止
			System.out.print((char)n);
		}
		fin.close();//关闭流
	}
	
	public static void writeFile (File file ) throws Exception{
		char[] chs=new char[]{'a','b','c','d','e','f'};
		String str="中华人民共和国万岁,世界人民大团结万岁!";
		byte bytes[]=str.getBytes();
		FileOutputStream fos=new FileOutputStream(file);//将输出的目标指向了file对象
		for(char ch:chs){//一个一个地写
			fos.write(ch);//向文件里写入内容
		}
		
		fos.write(bytes);//按字节数组写,这里不用循环
	
		
		fos.flush();//清除缓冲,将缓冲内容输出到文本
		fos.close();//关闭流
	}
	
	public static void fileCopy(File sourse,File dest) throws Exception{
		//文件的复制--->通过单字节
		FileInputStream fin=new FileInputStream(sourse);//读取源
		FileOutputStream fos=new FileOutputStream(dest);//输出到目的
		int n=-1;
		long m1=System.currentTimeMillis();//返回当前时间,以毫秒为单位
		System.out.println("开始时间:"+m1);
		while ((n=fin.read())!=-1){
			//每次读取一字节:读完就写完
			fos.write(n);
		}
		fin.close();//关闭流
		fos.flush();//清除缓冲
		fos.close();//关闭流
		long m2=System.currentTimeMillis();//返回当前时间
		System.out.println("结束时间:"+m2);
		System.out.println("总共用时:"+(m2-m1)/1000+"秒");//输出所用时间
		System.out.println("文件复制完毕");
	}
	
	public static void fileCopy2(File sourse,File dest) throws Exception{
		//文件的复制--->通过字节数组
		FileInputStream fin=new FileInputStream(sourse);//读取源
		FileOutputStream fos=new FileOutputStream(dest);//输出到目的
		long m1=System.currentTimeMillis();
		byte[] bytes=new byte[(int)(sourse.length())];//字节数组的长度为源文件的长度
		System.out.println("开始时间:"+m1);
		while(fin.read(bytes)!=-1){
			//每次读取一个数组,读完写完
			fos.write(bytes);//写
		}
		fin.close();
		fos.flush();
		fos.close();
		long m2=System.currentTimeMillis();
		System.out.println("结束时间:"+m2);
		System.out.println("总共用时:"+(m2-m1)/1000+"秒");
		System.out.println("文件复制完毕");
	}
	
	public static void fileReader(File file) throws Exception{
//		文本文件的读取 -->肯定采用字符流读取
		//按字符流读取,使用Unicode编码,故可以读入汉字
		FileReader reader=new FileReader(file);
//		int n=-1;
//		while((n=reader.read())!=-1){
//			System.out.print((char)n);
//		}//这样读一个一个字符,效率也比较低,故给其加上一个缓冲流BufferedReader
		BufferedReader bufferedreader=new BufferedReader(reader);
		String str=null;
		while((str=bufferedreader.readLine())!=null){
			System.out.println(str);//每次读取一行
		}
		reader.close();//关闭字符流
	}

	public static void fileWriter(File file) throws Exception{
		//写文本文件
		FileWriter fw=new FileWriter(file);
		String str="你好吗?自从我们的国母被曝用的是国产皮包后,那个品牌已经被买断货了!";
		fw.write(str);//写-->直接写 不用循环
		fw.close();//关闭流
		System.out.println("文件写入完毕!");
	}
}

你可能感兴趣的:(Lesson_23_Note_java IO系统(中))