2019-05-30 Java学习日记 day20 IO流

IO流

概念:

  IO流用来处理设备之间的数据传输

  Java对数据的操作是通过流的方式

  Java用于操作流的类都在IO包中

  流按流向分为两种:输入流,输出流

  流按流操作类型分为两种:

    字节流:字节流可以操作任何数据,因在计算机任何数据都是以字节的形式存储的

    字符流:字符流只能操作纯字符数据,比较方便

IO流常用父类:

  字节流的抽象父类

    InputStream

    OutputStream

  字符类的抽象方法:

    Reader

    Writer

IO程序书写

  使用前,导入IO包中的类

  使用时,进行IO异常处理

  使用后,释放资源

InputStream

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class demo1_FileInputStraem {

    public static void main(String[] args) throws IOException {
        //demo1();
        FileInputStream fis =new FileInputStream("xxx.txt");
        int a;
        while ((a=fis.read()) !=-1) {
            System.out.println(a);        
        }
        fis.close();
    }

    public static void demo1() throws FileNotFoundException, IOException {
        FileInputStream fis =new FileInputStream("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 c=fis.read();
        System.out.println(c);
        fis.close();   //关流释放资源
    }

}
案例

read()方法读取的是一个字节,为什么返回是int,而不是byte

  因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以而至今形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到11111111

  那么这11111111是byte类型的-1 ,我们的程序是遇到 -1 就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接受,如果11111111会在其前面补上

  24个0凑足4个字节,那么byte类型的 -1 就变成int类型的255了这样可以保证整个数据读完,而接受标记的 -1 就是int类型

OutputStream

在创建对象的时候是如果没有这个文件夹会帮我创建出来

如果有这个文件就会先将文件清空

参数追加 加true

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class demo2_OutputStream {

    public static void main(String[] args) throws IOException {
         FileOutputStream fos =new FileOutputStream("yyy.txt");
         //创建字节输出流对象,如果没有就自动创建一个
         
         fos.write(97);  //俗人写出的是一个int数,但是到文件上的是一个字节,会自动去除前三 个8位
         fos.write(98);
         fos.write(99);
         System.out.println(fos);
         fos.close();
         
         

    }
}
案例

拷贝图片

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class demo3_Copy {

    public static void main(String[] args) throws IOException {
        //demo1();
        FileInputStream fil1=new FileInputStream("忽然之间.mp3");  //创建输入流对象,关联双元.jpg
        
        FileOutputStream fil2=new FileOutputStream("copy.mp3");//创建输出流对象,关联copy.jpg
        
        int b;
        while ((b =fil1.read()) !=-1) {  //在不断的读取每一个字节
            fil2.write(b);    //将每个字节写出
            
        }
        fil1.close();//关流释放资源
        fil2.close();
    }

    public static void demo1() throws FileNotFoundException, IOException {
        FileInputStream fil1=new FileInputStream("1.JPG");  //创建输入流对象,关联双元.jpg
        
        FileOutputStream fil2=new FileOutputStream("copy.jpg");//创建输出流对象,关联copy.jpg
        
        int b;
        while ((b =fil1.read()) !=-1) {  //在不断的读取每一个字节
            fil2.write(b);    //将每个字节写出
            
        }
        fil1.close();//关流释放资源
        fil2.close();
    }

}
第一种拷贝

拷贝视频图解

字节数组拷贝-available()方法

 int read(byte [ ] b):一次读取一个字节数组

 write(byte [ ] b):一次写出一个字节数组

 available()获取读的文件所有的字节个数

第二种拷贝
public
static void main(String[] args) throws IOException { //demo1(); //demo2(); //有可能会导致内存溢出 FileInputStream fil1=new FileInputStream("忽然之间.mp3"); FileOutputStream fil2=new FileOutputStream("copy.mp3"); //int len=fil1.available(); //System.out.println(len); byte [] arr=new byte[fil1.available()];//创建与文件一样大小的字节数组 fil1.read(arr); //将文件上的字节读取到内存中 fil2.write(arr);//将字节数组中的字节数据写到文件上 fil1.close(); fil2.close(); } }

定义小数组

  *write(byte [ ] b)

  *write(byte [ ] b, int off, int len )写出有效的字节个数

public class demo_arrayCopy {

    public static void main(String[] args) throws IOException {
        //demo1();
        FileInputStream fis =new FileInputStream("xxx.txt");
        FileOutputStream fos =new FileOutputStream("aaa.txt");
        byte[] arr= new byte[2];
        int len;
        while ((len=fis.read(arr)) !=-1) {
            fos.write(arr,0,len);
            
        }
        fis.close();
        fos.close();
    }
}
第三种拷贝

猜你喜欢

转载自www.cnblogs.com/JungTan0113/p/10953044.html