IO流之字节输入流和字节输出流

OutputStream字节输出流

FileOutputStream类

  • 如果参数不写true,每次运行都会清空文件数据

  • 如果文件不存在会自动创建

构造方法

public FileOutputStream(String name, true)

在之前的文件续写,需要加true,默认false

注意:

  • windows换行符是\r\n

  • 回车符:回到一行的开头

  • 换行符:下一行newline

系统中的换行

  • Windows系统里,每行结尾是 回车+换行 ,即 \r\n ;

  • Unix系统里,每行结尾只有 换行 ,即 \n ;

  • Mac系统里,每行结尾是 回车 ,即 \r 。

File file = new File("a.txt");
FileOutputStream fOS = new FileOutputStream(file);
FileOutputStream fOS2 = new FileOutputStream("a.txt");
//写入字节数据
//虽然参数为int类型四个字节,但是只会保留一个字节的信息写出
fOS.write(97);
fOS2.write(100);
​
// 字符串转换为字节数组
byte[] b = "练习测试".getBytes();
​
// 写出字节数组数据
fOS.write(b);
​
// 写出从索引2开始,2个字节。索引2是c,两个字节,也就是cd。
fOS.write(b,2,2);
​
// 定义字节数组
byte[] b2 = {97,98,99,100,101};
// 遍历数组
for (int i = 0; i < b2.length; i++) {
// 写出一个字节
fos.write(b2[i]);
// 写出一个换行, 换行符号转成数组写出
fos.write("\r\n".getBytes());
}
​
//关闭流文件对象
fOS.close();
fOS2.close();

 

 

InputStream字节输入流

FileInputStream类

构造方法

  • FileInputStream(File file) : 创建一个 FileInputStream 文件由文件系统中的 File对象 file命名。

  • FileInputStream(String name) : 创建一个 FileInputStream 文件由文件系统中的路径名 name命名.

当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出 FileNotFoundException 。

读取字节: read 方法,每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回 -1 ,代码使用演示

虽然读取了一个字节,但是会自动提升为int类型

// 使用文件名称创建流对象
FileInputStream fis = new FileInputStream("aa.txt");
// 读取数据,返回一个字节
int read = fis.read();
System.out.println((char) read);
read = fis.read();
System.out.println((char) read);
read = fis.read();
System.out.println((char) read);
read = fis.read();
System.out.println((char) read);
read = fis.read();
System.out.println((char) read);
// 读取到末尾,返回‐1
read = fis.read();
System.out.println( read);
​
//循环方式代替以上代码
int b ;
// 循环读取
while ((b = fis.read())!=‐1) {
  System.out.println((char)b);
}
// 关闭资源
fis.close();
​
// 关闭资源
fis.close();

 

使用字节数组读取read(byte[] b)

  • 每次读取b的长度个字节到数组中,返回读取到的有效字节个数,读 取到末尾时,返回 -1

  • 由于最后一次读取时,只读取一个字节 e ,数组中,上次读取的数据没有被完全替换,所以要通过 len ,获取有效的字节

// 使用文件名称创建流对象.
FileInputStream fis = new FileInputStream("bbb.txt"); // 文件中为abcde
// 定义变量,作为有效个数
int len ;
// 定义字节数组,作为装字节数据的容器
byte[] b = new byte[2];
// 循环读取
while (( len= fis.read(b))!=‐1) {
// 每次读取后,把数组的有效字节部分,变成字符串打印
System.out.println(new String(b,0,len));// len 每次读取的有效字节个数
}
// 关闭资源
fis.close();

 

 


posted @ 2018-08-21 08:24  205李华秋  阅读(173)  评论(0编辑  收藏  举报