IO流_2_字节流+字符流+节点流

3 篇文章 0 订阅

目录

1:InputStream字节输入流和OutputStream字节输出流

​编辑 

1、InputStream基本方法:

2、OutputStream主要方法:

2:Reader字符输入流和Writer字符输出流

2.1、Reader(API)

2.2、Writer(API)

3:节点流

3.1、FileInputStream和FileOutputStream

1、FileInputStream和FileOutputStream

2、FileOutputStream

3.2、FileReader和FileWriter

1、FileReader

2、FileWriter

3、总结

4、建议采纳


1:InputStream字节输入流和OutputStream字节输出流

继承自InputStream和OutputStream的流都是用于向程序中输入数据的和输出数据的,且数据的单位为字节(8位),下图中深色为节点流,浅色为处理流

 

1、InputStream基本方法:

public abstract int read() throwsIOException

从输入流中读取数据的下一个字节, 返回读到的字节值.若遇到流的末尾,返回-1

public int read(byte[] b) throwsIOException

从输入流中读取 b.length 个字节的数据并存储到缓冲区数组b中.返回的是实际读到的字节总数

public int read(byte[] b, int off, int len)throws IOException

读取 len 个字节的数据,并从数组b的off位置开始写入到这个数组中

public void close() throws IOException

关闭此输入流并释放与此流关联的所有系统资源

public int available() throws IOException

返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数

public skip(long n) throws IOException

跳过和丢弃此输入流中数据的 n 个字节,返回实现路过的字节数。

2、OutputStream主要方法:

public abstract void write(int b) throwsIOException

将指定的字节写入此输出流

public void write(byte[] b) throwsIOException

将 b.length 个字节从指定的 byte 数组写入此输出流

public void write(byte[] b, int off, intlen) throws IOException

将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流

public void flush() throws IOException

刷新此输出流并强制写出所有缓冲的输出字节

pulbic void close() throws IOException

关闭此输出流并释放与此流有关的所有系统资源

package com.File_demo;

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

public class FileInputStreamTest2 {

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

        InputStream inputStream = new FileInputStream("File/src/1.txt");
//        每次拿到三个字符
        byte [] b = new byte[3];
//        拿到的个数
        int r1 = inputStream.read(b);
        System.out.println(r1);
//        拿三个字符放到b中进行输出
        System.out.println(new String(b,0,r1));
        int r2 = inputStream.read(b);
        System.out.println(r2);
        System.out.println(new String(b,0,r2));

//        int len = 0 ;
//        while((len = inputStream.read(b))!=-1){
//            System.out.print(new String(b,0,len));
//        }


    }
}
package com.File_demo;

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

public class FileOutputStreamTest1 {

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

//        true可追加,就是每次不输出的内容不重置
        FileOutputStream outputStream = new FileOutputStream("File/src/1.txt",true);

        byte[] b = {65,66,67};
//        outputStream.write(97);
//        outputStream.write(98);
        outputStream.write(b);
        outputStream.flush();
    }
}

2:Reader字符输入流和Writer字符输出流

继承自Reader的流和Writer的流都是用于向程序中输入数据的和输出数据的,且数据的单位为字符(16位),下图中深色为节点流,浅色为处理流

2.1、Reader(API)

 

public int read() throws IOException

读取单个字符,返回作为整数读取的字符,如果已到达流的末尾返回-1

public int read(char[] cbuf) throwsIOException

将字符读入数组,返回读取的字符数

public abstract int read(char[] cbuf,int off, int len) throws IOException

读取 len 个字符的数据,并从数组cbuf的off位置开始写入到这个数组中

public abstract void close() throwsIOException

关闭该流并释放与之关联的所有资源

public long skip(long n) throwsIOException

跳过n个字符

2.2、Writer(API)

public void write(int c) throwsIOException

写入单个字符

public void write(char[] cbuf) throws IOException

写入字符数组

public abstract voidwrite(char[] cbuf, int off, int len) throws IOException

写入字符数组的某一部分

public void write(String str) throwsIOException

写入字符串

public void write(String str,int off, int len) throws IOException

写字符串的某一部分

public abstract void close() throwsIOException

关闭此流,但要先刷新它

public abstract void flush() throwsIOException

刷新该流的缓冲,将缓冲的数据全写到目的

package com.File_demo;

import java.io.*;

public class ReadWriteStream {

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

//      创建一个字符输入流
        Reader reader = new FileReader("File/src/pet.template");
        Writer writer = new FileWriter("File/src/pet.template");
        int r1 = reader.read();
        System.out.println((char) r1);
        int len = 0 ;
        while((len = reader.read())!=-1){
            writer.write(len);
        }
        reader.close();
        writer.close();
    }
}

3:节点流

节点流为可以从一个特定的数据源(节点)读写数据(如:文件,内存)

3.1、FileInputStream和FileOutputStream

1、FileInputStream和FileOutputStream

FileInputStream 类创建一个能从文件读取字节的InputStream类,它的两个常用的构造方法如下:

FileInputStream(Stringfilepath)

FileInputStream(FilefileObj)

这两个构造方法都能引发FileNotFoundException异常。这里,filepath是文件的绝对路径,也可是相对路径。fileObj是描述该文件的File对象。

下面的例子创建了两个使用同样磁盘文件且各含一个上面所描述的构造方法的FileInputStreams类:

//方式一
InputStream f0 = new FileInputStream("c:\\test.txt");
//方式二
File f = new File("c:\\test.txt");
InputStream f1 = new FileInputStream(f);

尽管第一个构造方法可能更常用到,而第二个构造方法则允许在把文件赋给输入流之前用File方法更进一步检查文件。当一个FileInputStream被创建时,它可以被公开读取

2、FileOutputStream

FileOutputStream创建了一个可以向文件写入字节的类OutputStream,它常用的构造方法如下:

FileOutputStream(StringfilePath)

FileOutputStream(FilefileObj)

FileOutputStream(StringfilePath, boolean append)

它们可以引发IOException或SecurityException异常。这里filePath是文件的绝对路径,也可以是相对路径。fileObj是描述该文件的File对象。如果append为true,则表示追加。FileOutputStream 的创建不依赖于文件是否存在。在创建对象时,FileOutputStream会在打开输出文件之前就创建它。这种情况下如果试图打开一个只读文件,会引发一个IOException异常

3.2、FileReader和FileWriter

1、FileReader

FileReader类创建了一个可以读取文件内容的Reader类。它最常用的构造方法显示如下:

FileReader(StringfilePath)

FileReader(FilefileObj)

每一个都能引发一个FileNotFoundException异常。

2、FileWriter

FileWriter 创建一个可以写文件的Writer类。它最常用的构造方法如下:

FileWriter(StringfilePath)

FileWriter(StringfilePath, boolean append)

FileWriter(FilefileObj)

它们可以引发IOException或SecurityException异常。这里,filePath是文件的绝对路径,fileObj是描述该文件的File对象。如果append为true,输出是附加到文件尾的。FileWriter类的创建不依赖于文件存在与否。在创建文件之前,FileWriter将在创建对象时打开它来作为输出。如果试图打开一个只读文件,将引发一个IOException异常。

3、总结

字节流:字节(8位)

字符流:字符(16位)

字节流和字符流较为简单和常用,每次开启了就必须关闭

package com.File_demo;

import java.io.*;

public class ReadWriteStream {

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

//      创建一个字符输入流
        Reader reader = new FileReader("File/src/pet.template");
//      创建一个字符输出流
        Writer writer = new FileWriter("File/src/pet.template");
//      进行读取对象
        int r1 = reader.read();
        System.out.println((char) r1);
//      读取
        int len = 0 ;
        while((len = reader.read())!=-1){
//      输出
            writer.write(len);
        }
//      刷新
        writer.flush();
//      关闭流
        reader.close();
        writer.close();
    }
}

4、建议采纳

如有建议或者错误请私信我进行修改,感谢!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值