IO流之字节流

IO流:

IO流:用于读写数据的(可以读写文件,或网络中的数据…)

I:指Input,称为输入流:负责把数据读到内存中去。

O:指Output,称为输出流:负责写数据出去。

 
 

IO流的分类:

按照流的方向:输入流、输出流。

按照流中数据的最小单位:字节流、字符流。

字节流:适合操作所有类型的文件。(比如:音频、视频、图片、文本文件的复制,转移等)

字符流:适合操作纯文本文件。(比如:读写txt、java文件等)

IO流四大流:字节输入流字节输出流字符输入流字符输出流

 

 

字节流:

字节流适合做一切文件数据的拷贝(音视频,文本);字节流不适合读取中文内容输出

 

FileOutputStream:

FileOutputStream:文件字节输出流。

作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去。

 

构造器:
构造器说明
public FileOutputStream(File file)创建字节输出流管道与源文件对象接通
public FileOutputStream(String filepath)创建字节输出流管道与源文件路径接通
public FileOutputStream(File file,boolean append)创建字节输出流管道与源文件对象接通,可追加数据
public FileOutputStream(String filepath,boolean append)创建字节输出流管道与源文件路径接通,可追加数据

 

方法:
方法名称说明
public void write(int a)写一个字节出去
public void write(byte[] buffer)写一个字节数组出去
public void write(byte[] buffer , int pos , int len)写一个字节数组的一部分出去。
public void close() throws IOException关闭流。

注意:

​ public FileOutputStream(Stringname):创建文件字节输出流,使用字符串指定文件路径,文件不存在,会创建文件,文件存在会清空文件的内容

​ public FileoutputStream(Filefile):创建文件字节输出流,使用File对象指定文件路径

​ FileoutputStream fos= new FileoutputStream(“dayo9-io\abc\1.txt”,true);// append设置为true,不会润清空文件的内容

​ 1.如果路径指定的是文件夹,会出现:FileNotFoundException:dayθ9-io\abc(拒绝访问。)

​ 2.如果父路径不存在,会出现:FileNotFoundException:dayθ9-io\abc2\1.txt(系统找不到指定的路径。)

 

package com.ouyang.demo03;

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

public class demo01 {
    public static void main(String[] args) throws IOException {
        //1.创建文件字节输出流,关联文件
        //public FileOutputStream(File file):创建文件字节输出流,使用File对象指定文件路径,文件不存在会创建文件,文件存在会清空文件的内容
        // FileOutputStream fos1=new FileOutputStream(new File("day09\\abc\\1.txt"));

        //public FileOutputStream(String name):创建文件字节输出流,使用字符申指定文件路径,文件不存在会创建文件,文件存在会清空文件的内容
        FileOutputStream fos2=new FileOutputStream("day09\\abc\\1.txt");

        //public FileOutputStream(String name, boolean append):append表示在原来的文件末尾追加内容
        FileOutputStream fos3=new FileOutputStream("day09\\abc\\1.txt",true);

        //2.调用方法把字节数据写到流
        //public void write(int b):写一个字节到流中
        fos2.write(65);
        fos2.write(66);


        byte[] bytes=new byte[]{97,98,99,100,101,102};

        //public void write(byte b[]):写一个数组的多个字节到流中
        fos2.write(bytes);

        //public void write(byte b[],int off,int len):写一个字节数组的部分数据到流中,从off开始,长度为len
        fos2.write(bytes,1,3);

        //3.关闭流
        fos2.close();
    }
}

 

 
 

FileInputStream:

FileInputStream:文件字节输入流。

作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去。

 

方法:
构造器说明
public FileInputStream(File file)创建字节输入流管道与源文件接通
public FileInputStream(String pathname)创建字节输入流管道与源文件接通
方法名称说明
public int read()每次读取一个字节返回,如果发现没有数据可读会返回-1.
public int read(byte[] buffer)每次用一个字节数组去读取数据,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1.
方法名称说明
public byte[] readAllBytes() throws IOException直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返回

如果文件过大,创建的字节数组也会过大,可能引起内存溢出。

 
 

一次读一个字节

package com.ouyang.demo03;

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

public class demo02 {
    public static void main(String[] args) throws IOException {
        //1.创建文件字节输出流,关联文件
        FileInputStream fis=new FileInputStream("day09\\abc\\2.txt");


        //2.调用方法把文件数据输出到程序
        //读取一个字节
        // int b = fis.read();
        // System.out.println("b = " + b);

        //定义变量保存每次读取的数据
        int data;
        // 1.fis.read():从文件读取一个字节数据
        // 2.data=fis.read():把读取的字节数据赋值给变量data
        // 3.data!=-1:判断读取的数据是否是-1(表示文件已经没有数据可以读取了)
        while((data=fis.read())!=-1){
            System.out.println(data);
        }

        //3.关闭流
        fis.close();
    }
}

 
 
 

一次读多个字节

package com.ouyang.demo03;

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

public class demo03 {
    public static void main(String[] args) throws IOException {

        //1.创建字节输入流,关联文件
        FileInputStream fis=new FileInputStream("day09\\abc\\2.txt");

        //定义变量保存读取的数量
        int len;

        //定义数组保存读取的数据(吃饭的碗),实际数组的长度1024的整数倍1024*8
        byte[] bytes=new byte[3];


        //fis.read(bytes):读取多个字节保存到数组中
        //len=fis.read(bytes):读取的字节数量保存到len中
        //len!=-1:  等于-1表示该文件已经没有数据可以读取了
        while((len=fis.read(bytes))!=-1){
            System.out.println("读取内容:"+new String(bytes,0,len));
        }


        //3.关闭流
        fis.close();
    }
}

 
 
 

一次性接收所有数据。

package com.ouyang.demo03;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;

public class demo04 {
    public static void main(String[] args) throws IOException {
        //1.创建字节输入流,关联文件
        FileInputStream fis=new FileInputStream("day09\\abc\\2.txt");

        byte[] bytes = fis.readAllBytes();

        String s = new String(bytes);
        System.out.println("s = " + s);
        String s1 = Arrays.toString(bytes);
        System.out.println("s1 = " + s1);
    }
}

 
 
 

文件复制:

package com.ouyang.demo03;

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

public class demo05 {
    public static void main(String[] args) throws IOException {
        //输入
        FileInputStream fis=new FileInputStream("day09\\abc\\2.txt");

        //输出
        FileOutputStream fos =new FileOutputStream("day09\\abc\\22.txt");

        byte[] bytes=new byte[3];

        int len;
        while((len=fis.read(bytes))!=-1){
            fos.write(bytes,0,len);
        }

        //关流
        fos.close();
        fis.close();


    }
}

 
 

释放资源:

try-catch-finally:

finally代码区的特点:无论try中的程序是正常执行了,还是出现了异常,最后都一定会执行finally区,除非JVM终止。

作用:一般用于在程序执行完成后进行资源的释放操作(专业级做法)。

package com.ouyang.demo03;

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


//jdk1.7之前的写法
public class demo06 {
    public static void main(String[] args) {
        FileInputStream fis=null;
        try {
            fis=new FileInputStream("day09\\abc\\2.txt");
        } catch (FileNotFoundException e) {
            System.out.println("处理了异常" + e);
        } finally {
            if(fis!=null){
                try {
                    fis.close();
                } catch (IOException e) {
                    System.out.println("处理了异常" + e);
                }
            }

        }
    }
}

 
 

try-with-resource:

格式:
try (定义资源1;定义资源2;…){
    可能出现异常的代码;
} catch (异常类名 变量名) {
    异常的处理代码;
} 

该资源使用完毕后,会自动调用其close()方法,完成对资源的释放。

try的 () 中只能放置资源,否则报错

 

package com.ouyang.demo03;

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

public class demo07 {
    public static void main(String[] args) {
        //try()括号里写的是实现了AutoCloseable接口的类
        try (FileInputStream fis = new FileInputStream("day09\\abc\\2.txt");
             FileOutputStream fos=new FileOutputStream("day09\\abc\\1.txt");
        ) {
        } catch (FileNotFoundException e) {
            System.out.println("处理了文件不存在异常 " + e);
        } catch (IOException e) {
            System.out.println("IO异常 " + e);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值