IO-读取与输出


总结:对于输出到文件操作,用pw最省事,带换行、带刷新,名称短。

 

这里通过三组方法来实现文件复制,并揭示一个小现象。


FileReader PrintWriter  比较简便的文本操作方法

FileInputStream FileOutputStream  任何类型的文件都适用

BufferedReader BufferedWriter 带缓冲区,效率高

/**
	 * 复制硬盘上的文件,将f.txt数据复制到write.txt
	 * @throws Exception
	 */
	private static void readData1() throws Exception {

		
		//关联一个本地文件,f.txt,不加路径表示是当前目录
		//eclispe当期目录是当前的java project在硬盘的位置
		FileReader fr = new FileReader("f.txt");
		
		//关联一个硬盘上的文件,用于输出数据
		PrintWriter pw = new PrintWriter("write.txt");
		
		char[] buf = new char[1024];	//用char数组来存储读到的数据
		int len = 0;	//用于表示char数组中新读取到的数据长度
		while((len=fr.read(buf))!=-1)	//-1表示读到文件末尾,没读到文件末尾就一直读
		{
			//输出数据
			//最后一个char数组可能不是读满1024个字符,所以要指定输出的char数组的长度
			//因为print不支持输出指定长度的char数组,所以转成String,否则文件末尾会有很多空格
			
			pw.println(new String(buf,0,len));
		}
		
		fr.close();	//fr调用了底层资源,关闭资源
		pw.close();	//关闭资源,也起到了将数据刷到硬盘的作用
		
	}


打开write.txt发现文件最后一行比源文件多了一个换行。是因为用了pw的println的原因吗?

用字节输出流来写数据试试。

/**
	 * 复制硬盘上的文件,将f.txt数据复制到write.txt
	 * @throws Exception
	 */
	private static void readData2() throws Exception {

		//源文件
		FileInputStream fis = new FileInputStream("f.txt");

		//关联一个硬盘上的文件,用于输出数据
		FileOutputStream fos = new FileOutputStream("write.txt");

		byte [] buf = new byte[1024];	//用byte数组来存储读到的数据
		int len = 0;	//用于表示char数组中新读取到的数据长度
		while((len=fis.read(buf))!=-1)	//-1表示读到文件末尾,没读到文件末尾就一直读
		{
			//输出数据
			//最后一个char数组可能不是读满1024个字符,所以要指定输出的char数组的长度
			//因为print不支持输出指定长度的char数组,所以转成String,否则文件末尾会有很多空格

			fos.write(buf,0,len);
		}

		//关闭资源
		fis.close();	
		fos.close();	
	}


这次新文件最后没有换行了。

再试试用bufferwriter写数据

/**
	 * 复制硬盘上的文件,将f.txt数据复制到write.txt
	 * @throws Exception
	 */
	private static void readData3() throws Exception{

		//源文件
		BufferedReader bufr = new BufferedReader(new FileReader("f.txt"));

		//关联一个硬盘上的文件,用于输出数据
		BufferedWriter bufw = new BufferedWriter(new FileWriter("write.txt"));

		String line = null;	//用line来存储读到的一行数据
		while((line=bufr.readLine())!=null)	//null表示读到文件末尾,没读到文件末尾就一直读
		{
			//输出数据
			bufw.write(line);	
			bufw.newLine();	 //写一个换行符
			bufw.flush();	//将数据刷到硬盘上
		}

		//关闭资源
		bufr.close();	
		bufw.close();
	}


发现,新文件最后这次也多了个换行。

这里也是因为写了最后一行数据后,又写了一个换行符bufw.newLine();

 

所以还是字节流比较规范。


转载于:https://my.oschina.net/zuodev/blog/663277

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值