一、IO流的框架

io java 流返回文件 java的io流_System

1.IO流的概述
  • IO流用来处理设备之间的数据传输
  • Java对数据的操作是通过流的方式
  • Java用于操作流的类都在IO包中
2.IO流的分类
  • 流按流向分:输入流、输出流
  • 流按操作类型分为两种:
  • 字节流:字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式储存的
  • 字符流:字符流只能操作纯字符数据,比较方便
3.IO流的常用父类
  • 字节流的抽象父类
  • InputStream
  • OutputStream
  • 字符流的抽象父类
  • Reader
  • Writer
4.IO流程序的书写
  • 使用前:导入IO包中的类
  • 使用时:进行IO异常处理
  • 使用后:释放资源,关闭流
5.IO流(FileInputStream)
  • read():一次读取一个字节
public class Demo {
 public static void main(String[] args) throws IOException {
     //创建流对象
     FileInputStream fis=new FileInputStream("/Users/xiayubao/IDEA/springboot-quick/src/main/java/com/stram/xxx.txt");
    //从硬盘上读取一个字节
    int x=fis.read();
    System.out.println(x);
    int y=fis.read();
    System.out.println(y);
    int z=fis.read();
    System.out.println(z);
    int a=fis.read();
    System.out.println(a);
    int b=fis.read();
    System.out.println(b);

    //关闭流。释放资源
    fis.close();
 }
}
输出:
97
98
99
-1
-1

代码优化:

public class Demo {
 public static void main(String[] args) throws IOException {
   //创建流对象
   FileInputStream fis = new FileInputStream("/Users/xiayubao/IDEA/springboot-quick/src/main/java/com/stram/xxx.txt");
   //定义变量,记录每次读到的字节
   int b;
   //将每次读到的字节赋值给b并判断是否是-1
   while ((b = fis.read()) != -1) {
       //打印每一个字节
       System.out.println(b);
   }
   //关闭流。释放资源
   fis.close();
}
}
输出:
97
98
99
6.Read()方法返回值类型为什么是int
  • read()方法读取的是一个字节,为什么返回是int,而不是byte
  • 因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111
  • 那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上
  • 24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型
7.FileOutputStream
  • write()一次写出一个字节
public class Demo {
public static void main(String[] args) throws IOException {
    //创建字节输出流对象
    FileOutputStream fos = new FileOutputStream("/Users/xiayubao/IDEA/springboot-quick/src/main/java/com/stram/xxx.txt");

    //虽然写出的是一个int数,但是在写出的时候会将前面24个0去掉,所以写出的是一个byte
    fos.write(97);
    fos.write(98);
    fos.write(99);
    //关闭流。释放资源
    fos.close();
}
}

写入:abc
8.IO流标准输入输出格式
public class Demo {
 public static void main(String[] args) throws IOException {
   //创建输入流对象,关联xxx.txt
   FileInputStream fis = new FileInputStream("xxx.txt");
   //创建输出流对象,关联zzz.txt
   FileOutputStream fos = new FileOutputStream("xxx.txt");

   int b;
   while ((b = fis.read()) != -1) {
       fos.write(b);
   }
   fis.close();
   fos.close();
}
}
9.字节数组拷贝之available()方法