文档章节

IO-读取与输出

zuodev
 zuodev
发布于 2016/04/20 21:30
字数 801
阅读 11
收藏 0


总结:对于输出到文件操作,用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();

 

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


© 著作权归作者所有

zuodev
粉丝 0
博文 37
码字总数 18402
作品 0
静安
高级程序员
私信 提问
Java基础笔记22

22.01_IO流(序列流) 1.什么是序列流 序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, 以此类推. 2.使用方式 整合两个...

dreamkong
2017/12/12
0
0
STM32 GPIO口基本结构和工作方式

上拉是一个电阻接到电压,其实就是增强IO的驱动能力,下拉是一个电阻接到地,保证IO口是低电平。 以上所有内容为笔记整理,其中有部分内容来自网络文章,若有侵权,请告知,作者会删除。

huhaoxuan2010
2018/05/25
0
0
JAVA NIO编程入门(一)

JAVA NIO编程入门(一) 一、前言 笔者之前接触的NIO编程比较少,所以对这一块的基础也比较弱,NIO作为java编程中一个重要的模块,不能很好的掌握它,感觉自己在java方面就掌握的不够,所以,...

木木匠
2018/09/01
144
0
java文件输入输出

在java程序中,对于数据的输入/输出操作以流(Stream)方式进行;J2SDK提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据,I/O流提供一条通道程序,可以使...

开源中国段子手
2015/11/23
128
0
Properties类(待整理)

1、在java.util 包下面有一个类 Properties,该类主要用于读取以项目的配置文件(以.properties结尾的文件和xml文件)。 Properties类的load和getProperty("")方法解释: load(InputStream...

浮躁的码农
2016/02/22
7
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部