一、背景

1.IO流有很多种,按照操作数据的不同,可以分为字节流和字符流,按照数据传输的方向不同又可以分为输入流和输出流,程序从输入流中读取数据,向输出流中写入数据,因为都是在IO包下面,所以就叫IO流。

2.在IO包中,字节流的输入输出流分别用java.io.InputStream和java.io.OutputStream表示,字符流的输入输出流分别用java.io.Reader和java.io.Writer表示。

二、字节流读文件的实例

1.由于计算机中的数据基本都是保存在硬盘的文件中,因此操作文件中的数据是常见的操作,在操作文件时,最常见的就是从文件中读取数据并将数据写入文件,即文件的读写,针对文件的读写,JDK专门提供了俩个类,分别是FileInputStream和FileOutputStream.

2.代码示例(test.txt中的内容student)

public static void main(String[] args) throws Exception {
    //创建一个文件字节输入流
    FileInputStream in = new FileInputStream("D://test.txt");
    //定义一个int类型的变量b,记住每次读取的一个字节的ascill码
    int b =0;
    while (true){
        //变量b记住读取的一个字节
        b = in.read();
        if (b ==-1){//如果读取的字节为-1,跳出while循环
            break;
         }
        System.out.println(b);//否则将b写出
      }
       in.close();
    }

3.结果

115
116
117
100
101
110
116

4.分析

1.创建的字节流FileInputStream通过read()方法将当前目录文件test.txt中的数据读取并打印。

三、字节流文件写操作实例

1.与FileInputStream对应的是FileOutputStream,FileOutputStream是OutputStream的子类,它是操作文件的字节输出流,专门用于把数据写入文件。

2.代码示例(D://test1.txt是自动生成的)

public static void main(String[] args) throws Exception {
   //创建一个文件字节输出流
   FileOutputStream out = new FileOutputStream("D://test1.txt");
   String string =  "我是学生";
   byte[] bytes = string.getBytes();
   for (int i = 0;i<bytes.length;i++){
      out.write(bytes[i]);
     }
      out.close();
 }

3.结果

我是学生

四、另外改进的例子

1.问题描述

从前面的例子可以看出,IO流在进行数据读写操作的时候会出现异常,为了代码的简洁,在程序中直接使用throws关键字将异常抛出,然而一旦遇到IO异常,IO流的close()方法将无法得到执行,流对象所占用的系统资源将得不到释放,因此为了保证IO流的close()方法必须执行,通常将关闭流的操作写在finally代码块中。

2.代码

public static void main(String[] args){
        //创建一个文件字节输出流
        FileOutputStream out = null;
        try {
            out = new FileOutputStream("D://test1.txt",true);
            String string =  "我是学生哈哈哈";
            byte[] bytes = string.getBytes();
            for (int i = 0;i<bytes.length;i++){
                out.write(bytes[i]);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if (out!=null){//如果out不为空,关闭输出流
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

3.结果

我是学生我是学生哈哈哈

五、结束

1.今天就说到这里,简简单单的入门,后面的内容下次继续讲!!!