说完了字节输入流,再来聊一聊字节输出流。我们知道,输出指的是从内存到磁盘传递。那么这个过程是如何实现的呢?

        假设我在d盘中创建了一个名为Test97.txt的文件,我想要在里面填写一个“Hello,world”数据。

        我们先在main函数里新创建一个FileOutputStream对象命名为fileOutputStream0,打开FileOutputStream构造方法的API文档:

        发现除了接受文件类型或地址以外,还可以传入一个boolean类型的变量。这个变量决定着写入的数据为追加还是重写,如果填true则在内容末尾追加内容,否则将内容删除重写。

//创建字节输出流对象
String FilePath = "d:\\Test97.txt";
FileOutputStream fileOutputStream0 = new FileOutputStream(FilePath);

        一、输出单个字符

        java8的API文档提供了三种字节流的输出方式:

        我们先来介绍API文档的最后一种,也是最简单的一种。在write()方法中写入一个int类型的变量,系统会自动通过ASCLL编码转换为对应的字符。

        也可以直接在里面填入char类型的变量(切忌使用双引号),java会自动转为int类型填写,再通过ASCLL码对应输出。

        例如我想在文件中填写一个't'字符:

fileOutputStream0.write('y');

        二、输出字符串

        对应API文档的第一种方法,需要在write方法中填写一个byte类型的数组,java程序会将其对应为字符串输出。

        例如我们先创建一个字符串,再想办法将其转换为byte类型的数组。可以使用String里的getBytes()方法全部转换为byte类型输出。也可以麻烦一点,一个一个转成byte类型输出,方法不会受限的。

String str = "Hello,world";
//定义字符串
byte[] b = new byte[str.length()];
for(int i = 0;i<str.length();i++) {
	b[i] = (byte)str.charAt(i);
}
//法一:一个一个转成byte类型放进byte类型数组里输出
fileOutputStream0.write(b);
String str = "Hello,world";
fileOutputStream0.write(str.getBytes());
//法二:通过getBytes()方法输出

        三、输出指定长度的字符串

        对应API文档的第二种方法,除了需要填写一个byte类型的数组以外,还需要填写两个变量,一个是int类型的off,一个是int类型的len。off变量说明从byte数组的哪个元素开始索引,len表示截取从索引开始后几个元素。

        例如我有一个“Hello,world”字符串,我只想输出“world”字符串到文件里:

String str = "Hello,world";
fileOutputStream0.write(str.getBytes(),6,5);

        四、注意事项

        同字节输入流一样,字节输出流也不可以用到中文。因为传入的byte类型编码最多为127,而中文的编码比127大很多,所以无法编码中文。

        输入输出流这里不存在听不听的懂的问题,只要细心,很多问题都是可以解决的。

更多推荐