IO(2)----字节流

版权声明:未经同意,严禁转载 https://blog.csdn.net/pengchengliu/article/details/82859944

 一、输入输出的概念                                                                                                                         点击此处返回总目录

二、字节输出流OutputStream

三、

一、输入输出的概念

前面讲了如何操作文件和目录。从现在开始讲如何往文件中写数据读数据。

首先要搞明白什么叫做Input,什么叫做Output。

Input、Output是对于程序来说的。读取文件中的数据叫做输入,把数据写到文件中叫做输出。

Input   :输入  从文件(硬盘)------->程序(内存)

Output:输出  从程序(内存)------->文件(硬盘)

进行文件内容的操作需要通过Java中提供的两组数据流的操作类完成:

字节操作流:OutputStream、InputStream

字符操作流:Writer、Reader

流对象学习技巧:

       流对象都是相辅相成的:有输入必有输出,有输出必有输入;输出能输出什么,输入就能输入什么。所以学会了一个方向,另一个方向完全能够明白。

流对象的使用步骤:

1. 创建流的子类对象,绑定数据目的。

2. 调用流对象的方法

3. close()

二、字节输出流OutputStream

java.io.OutputStream是抽象类,是所有字节输出流的父类。作用是从java程序写出到文件。

OutputStream每次只操作文件中的1个字节。

字节输出流可以写任意文件。

常用方法:

这个类的方法都是写文件的一下方法,一共也没几个。所有的子类都得具有这些方法。

1. write(int b)                                     //写入1个字节。int型可以砍掉3个字节变为byte。要写入的字节是参数b的八个低位。

                                  b的 24 个高位将被忽略。【例1】【例2】【例3】

2. write(byte[] b)                                //写入字节数组。

3. write(byte[] b , int off , int len)        //将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

4. close()                                           //关闭流对象,并且释放与此流相关的资源。java当中的流对象,在操作文件的时候,自己并不                                                                  做,而是使用的操作系统的功能,当流用完了,系统资源必须要释放掉。如果不close(),文件

                                                            想删都删不了。

因为是抽象类,所以要通过子类对象来学习父类的方法。OutputStream类的常用子类有ByteArrayOutputStream(字节数组输出流,这个流可以写字节数组)、FileOutputStream(这个流用于写文件)、FilterOutputStream(跟过滤器有关系)、ObjectOutputStream(这个用来写对象)、OutputStream(其他包中的一个流,跟我们没什么关系)、PipeOutputStream(管道流)等。

三、FileOutputStream

1)构造方法

作用:绑定输出的输出目的。

1. FileOutputStream(File file)                  //参数为File类型的对象。

2. FileOutputStream(String name)

注:

1.当文件不存在时,构造方法会先创建文件。

2.当原先有文件时,会覆盖掉(先删除原来的,再创建新的)。

2)常用方法:

例1:write(int b)

package cn.itcast.demo01;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class Test {
    public static void main(String[] args) throws IOException {
        OutputStream ops = new FileOutputStream("e:\\a.txt");    //写数据的目的文件。就是指写到哪里。
        ops.write(100);  
        ops.close();
    }
}

运行结果:

       打开e:\a.txt,发现里面只有一个字母'd'。

分析:

      100的二进制为:00000000 00000000 00000000 01100100 ,低字节为01100100。所以在硬盘中存的是二进制01100100,当打开记事本,记事本是文本工具,文本工具开启的一瞬间都会去走编码表,二进制"01100100"对应的是字符'd',所以看到的是字符'd'。

例2:write(int b)

package cn.itcast.demo01;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class Test {
    public static void main(String[] args) throws IOException {
        OutputStream ops = new FileOutputStream("e:\\a.txt");    //写数据的目的文件。就是指写到哪里。
        ops.write(1124); 
        ops.close();
    }
}

运行结果:

       打开e:\a.txt,发现里面只有一个字母'd'。

结果分析:

      1124的二进制为:00000000 00000000 00000100 01100100 ,低字节为01100100。所以在硬盘中存的是二进制01100100,当打开记事本,记事本是文本工具,文本工具开启的一瞬间都会去走编码表,二进制"01100100"对应的是字符'd',所以看到的是字符'd'。

在一个文本当中,一个汉字占两个字节,数字占1个字节。所以如果a.txt中存储了"吃",则a.txt为2个字节。如果a.txt中存储了"100",则a.txt为3个字节。

要想打开a.txt,能够看到"100",怎么办?【例3】

例3:

package cn.itcast.demo01;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class Test {
    public static void main(String[] args) throws IOException {
        OutputStream ops = new FileOutputStream("e:\\a.txt");    //写数据的目的文件。就是指写到哪里。
        ops.write(49);    //低字节二进制对应十进制为49,ASCII码为'1'
        ops.write(48);    //十进制48对应ASCII码为'0'
        ops.write(48);
        ops.close();
    }
}

运行结果:

打开a.txt,能够看到"100"

猜你喜欢

转载自blog.csdn.net/pengchengliu/article/details/82859944