IO流学习

IO流的目的:将数据写入文件中,实现文件的永久化存储,也可以读取出文件中的内容。

IO流可分为字节流和字符流。

字节流包含两个抽象类:

字节流:InputStream和OutputStream。InputStream表示输入流,是读取数据的基类,其常用子类有FileInputStream、ByteArrayInputStream等;OutputStream表示输出流,是写出数据的基类,其常用子类有FileOutputStream、ByteArrayOutputStream等。

字符流:包含两个抽象类:Reader和Writer。Reader表示输入流,是读取字符数据的基类,其常用子类有FileReader、CharArrayReader、StringReader等;Writer表示输出流,是写出字符数据的基类,其常用子类有FileWriter、CharArrayWriter、StringWriter等。

字节流常用方法

InputStream类常用方法:

int read(): 读取一个字节的数据,返回值为0-255,如果到达文件末尾,返回-1;

int read(byte[] b): 从输入流中读取b.length个字节的数据,并将其存储在数组b中;

void close(): 关闭输入流。

OutputStream类常用方法:

void write(int b): 写出一个字节的数据;

void write(byte[] b): 将数组b中的数据全部写出;

void flush(): 刷新输出流,将缓冲区中的数据写出;

void close(): 关闭输出流

字符流常用方法

Reader类常用方法:

int read(): 读取一个字符的数据,返回值为0-65535,如果到达文件末尾,返回-1;

int read(char[] cbuf): 从输入流中读取cbuf.length个字符的数据,并将其存储在数组cbuf中;

void close(): 关闭输入流。在这里插入代码片

Writer类常用方法:

void write(int c): 写出一个字符的数据;

void write(char[] cbuf): 将数组cbuf中的数据全部写出;

void flush(): 刷新输出流,将缓冲区中的数据写出;

void close(): 关闭输出流。

部分代码示例

public static void main(String[] args) throws IOException {
        File file = new File("E:/idea/test.txt");               //目标文件不存在会自动创建
        FileWriter fileWriter = new FileWriter(file,true);      //new FileWriter(file,true);true表示文件内容追加,不写或false表示对文件内容覆盖
        String str = "给我看看oooooooo!!!!!";
/*      一个一个字节写
        for(int i = 0;i < str.length();i++){
            fileWriter.write(str.charAt(i));
        }
        */
//以数组多个写入
        char[] chars = str.toCharArray();
        fileWriter.write(chars);
        fileWriter.close();
    }
public static void main(String[] args) throws IOException {
        File file = new File("E:/idea/test.txt");

        FileReader fileReader = new FileReader(file);
//一次读一个字符
/*
        int i ;
        while ((i = fileReader.read()) != -1){
            System.out.print((char)i);
        }
*/


        //多字符读取
        char[] ch = new char[4];
        int len = fileReader.read(ch);
        while (len != -1) {
            for (int i = 0; i < len; i++) {
                System.out.print(ch[i]);
            }
            len = fileReader.read(ch);

            /*String s = new String(ch, 0, len);
            System.out.print(s);
            len = fileReader.read(ch);*/
        }


        fileReader.close();
    }
public static void main(String[] args) throws IOException {

        File file = new File("E:/idea/zzz.png");

        File file1 = new File("E:/idea/ccc.png");

        FileInputStream fileInputStream = new FileInputStream(file);

        FileOutputStream fileOutputStream = new FileOutputStream(file1);

 /*
        int len = fileInputStream.read();
        while (len != -1){
            fileOutputStream.write(len);
            len = fileInputStream.read();
        }
*/

        byte[] b = new byte[1024*3];
        int len = fileInputStream.read(b);
        while(len != -1){
            fileOutputStream.write(b,0,len);
            len = fileInputStream.read(b);
        }

        fileOutputStream.close();
        fileInputStream.close();

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值