输入输出字节流

  • Post author:
  • Post category:其他



字节流:


主要有InputStream和OutputStream作为基类


字符流:


主要有Reader和Writer作为基类

字节流跟字符流的用法几乎一样,区别在两者操作数据单元不同,字节流操作数据单元是8位的字节,字符流操作16位的字符。

Java的IO流设计40多类,基本都是从以上4个抽象基类派生的。


开发步骤:


1创建字节文件输入流对象

2读数据

3释放资源


文件的字节输入流(InputStream)public FileInputStream(String name)



方法:


1public int read():从输入流中读取一个字节

2public int read(byte[] b):一次读取一个字节数组,最多读取b.length个字节的数据并存储在字节数组b中

3public int read(byte[] b, int off, int len):从输入流中最多读取len个字节的数据,并存储在数组b中。每次的存储都是从off位置开始的,返回实际读取的字节长度


文件的字节输出流(OutputStream)public FileOutputStream(String name)



方法:


1public void write():写入一个字节到输出流中

2public void write(byte[] b/char[] buf):一次写入一个字节数组,最多写入b.length个字节的数据输出到输出流中

3)public void write(byte[] b/char[] buf, int off, int len):从off位置开始的,实际读取的字节长度的字节数组或者字符数组,最多输出len个字节的数据到输出流中。


字符输入流(Reader)


方法:

1public int read():从输入流中读取一个字节

2public int read(char[] cbuf):一次读取一个字节数组,最多读取b.length个字节的数据并存储在字符数组cbuf中

3public int read(char[] cbuf, int off, int len):从输入流中最多读取len个字节的数据,并存储在字符数组cbuf中。每次的存储都是从off位置开始的,返回实际读取的字节长度


字符输出流(write)


方法:

1public void write():写入一个字节到输出流中

2public void write(byte[] b/char[] buf):一次写入一个字节数组,最多写入b.length个字节的数据输出到输出流中

3public void write(byte[] b/char[] buf, int off, int len):从off位置开始的,实际读取的字节长度的字节数组或者字符数组,最多输出len个字节的数据到输出流中。


便捷类:


字符转换输入:FileReader(String Filename)

字符转化输出:FileWriter(String Filename)


字节输出流

代码示例:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
 
public class OutPutDemo {
    public static void main(String[] args) throws IOException {
        //创建输出流对象fos,参数可以是String或者是File对象
        OutputStream fos = new FileOutputStream("day11_exercise\\aaa.txt");
        byte[] bt = {97,98,99,100,101,102,103,104};
        int a = 97;
        //写数据的三种方法
        //file.write(a);
        //file.write(bt);
        fos.write(bt, 0, 5);
        //释放资源
        fos.close();
    }
}

字节输出流写数据实现换行和不覆盖写入:

import java.io.FileOutputStream;
import java.io.IOException;
 
public class OutputStreamDemo {
    public static void main(String[] args) throws IOException {
        //创建字节输出流对象,第二个参数传入true可以实现数据追加输入
        FileOutputStream fos = new FileOutputStream("day11_exercise\\fos.txt",true);
 
        /*  写数据实现换行
                - windows:\r\n
                - linux:\n
                - mac:\r
         */
        for (int i = 0; i < 10; i++) {
            //必须以字节类型写入调用getBytes方法,返回的是一个byte型数组
            fos.write("hello".getBytes());
            fos.write("\r\n".getBytes());
        }
        //释放资源
        fos.close();
    }
}


字节输出流写数据的异常处理

异常处理格式:try-catch-finally(被finally控制的语句一定会执行,用于实现资源释放 )

try{
    可能出现异常的代码;
}catch(异常类名 变量名){
    异常的处理代码;
}finally{
    执行所有清除操作;
}
示例代码:

public class FileOutputStreamDemo04 {
    public static void main(String[] args) {
        //加入finally来实现释放资源
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("myByteStream\\fos.txt");
            fos.write("hello".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


字节输入流(读取数据)

字节输入流读取数据的步骤:

创建字节输入流对象(FileInputStream)

调用字节输入流对象的读数据方法

释放资源

read一次读取一个字节:

import java.io.FileInputStream;
import java.io.IOException;
 
public class InputDemo {
    public static void main(String[] args) throws IOException {
        //创建一个字节输入流对象fis
        FileInputStream fis = new FileInputStream("day11_exercise\\aaa.txt");
        int b ;//用于记录读入内存的字节
        //若文件读取完毕会返回-1
        while((b = fis.read()) != -1){
            System.out.println((char)b);
        }
        //释放资源
        fis.close();
    }
}


利用字节输入和输出流复制文件

import java.io.*;
 
public class copyDemo {
    public static void main(String[] args) throws IOException {
        File file = new File("E:\\网络图片\\05.jpg");
        //创建输入流对象
        FileInputStream fis = new FileInputStream(file);
        //创建输出流对象
        FileOutputStream fos = new FileOutputStream("day11_exercise\\" + file.getName());
        int len;
        byte[] bys = new byte[1024];
        //一次读入一个字节数组
        while((len = fis.read(bys))!=-1){
            //一次写入一个字节数组
            fos.write(bys);
        }
        //释放资源
        fis.close();
        fos.close();
    }
}



版权声明:本文为yyxzz_lyy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。