文章插图
2.1 文件的世界里一切皆为字节
我们必须明确一点的是,一切文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此 。所以,字节流可以传输任意文件数据 。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据 。
2.2 字节输出流(OutputStream)
java.io.OutputStream抽象类是表示字节输出流的所有类的超类(父类),将指定的字节信息写出到目的地 。它定义了字节输出流的基本共性功能方法,不要问我OutputStream为啥可以定义字节输出流的基本共性功能方法,熊dei啊,上一句说过了OutputStream是字节输出流的所有类的超类,继承知识,懂?(如果是真的不理解的小白同学,可以点击蓝色字体继承进入补习)
字节输出流的基本共性功能方法:
1、 public void close() :关闭此输出流并释放与此流相关联的任何系统资源 。
2、 public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出 。
3、 public void write(byte[] b):将 b.length个字节从指定的字节数组写入此输出流 。
4、 public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流 。 也就是说从off个字节数开始读取一直到len个字节结束
5、 public abstract void write(int b) :将指定的字节输出流 。
以上五个方法则是字节输出流都具有的方法,由父类OutputStream定义提供,子类都会共享以上方法FileOutputStream类
OutputStream有很多子类,我们从最简单的一个子类FileOutputStream开始 。看名字就知道是文件输出流,用于将数据写出到文件 。
FileOutputStream构造方法
不管学啥子,只有是对象,就从构造方法开始!
1、 public FileOutputStream(File file):根据File对象为参数创建对象 。推荐第二种构造方法【开发常用】:
2、 public FileOutputStream(String name): 根据名称字符串为参数创建对象 。
就以上面这句代码来讲,类似这样创建字节输出流对象都做了三件事情:
1、调用系统功能去创建文件【输出流对象才会自动创建】
2、创建outputStream对象
3、把foutputStream对象指向这个文件
注意:当你创建一个流对象时,必须直接或者间接传入一个文件路径 。比如现在我们创建一个FileOutputStream流对象,在该路径下,如果没有这个文件,会创建该文件 。如果有这个文件,会清空这个文件的数据 。有兴趣的童鞋可以测试一下,具体代码如下:
创建输出流对象的时候,系统会自动去对应位置创建对应文件,而创建输出流对象的时候,文件不存在则会报FileNotFoundException异常,也就是系统找不到指定的文件异常 。
FileOutputStream写出字节数据
使用FileOutputStream写出字节数据主要通过Write方法,而write方法分如下三种
- 写出字节:write(int b) 方法,每次可以写出一个字节数据,代码如下:
虽然参数为int类型四个字节,但是只会保留一个字节的信息写出 。流操作完毕后,必须释放系统资源,调用close方法,千万记得 。
- 写出字节数组:write(byte[] b),每次可以写出数组中的数据,代码使用演示:
- 写出指定长度字节数组:write(byte[] b, int off, int len) ,每次写出从off索引开始,len个字节,代码如下:
经过以上的代码测试,每次程序运行,每次创建输出流对象,都会清空目标文件中的数据 。如何保留目标文件中数据,还能继续追加新数据呢?并且实现换行呢?其实很简单,这个时候我们又要再学习FileOutputStream的另外两个构造方法了,如下:
1、public FileOutputStream(File file, boolean Append)
2、public FileOutputStream(String name, boolean append)
这两个构造方法,第二个参数中都需要传入一个boolean类型的值,true 表示追加数据,false 表示不追加也就是清空原有数据 。这样创建的输出流对象,就可以指定是否追加续写了,至于Windows换行则是 nr,下面将会详细讲到 。
实现数据追加续写代码如下:
Windows系统里,换行符号是rn ,具体代码如下:
回车符r和换行符n :回车符:回到一行的开头(return) 。换行符:下一行(newline) 。系统中的换行:Windows系统里,每行结尾是 回车+换行,即rn;Unix系统里,每行结尾只有 换行,即n;mac系统里,每行结尾是 回车,即r 。从 Mac OS X开始与linux统一 。
推荐阅读
- 云南旅游攻略,包含路线、景点、交通、住宿、美食、费用最全攻略
- 女生如何逆袭变女神?变美最全攻略请收下
- 天眼查询个人 查询个人信息最全的网站
- 香格里拉旅游最全攻略
- 历史上的生物战 中国人和外星人发生过战争吗
- 荣耀|荣耀史上最薄5G手机!荣耀Play6T系列亮相
- 凉茶史上首个公约 凉茶非遗品牌领跑行业
- 史上最全Docker环境安装指南
- 史上最惨烈的拳击赛 最精彩的重量级拳击比赛
- 十年免税!芯片史诗级利好来袭,最全产业链公司一览「附名单」
