Java输入输出流

流的介绍

流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样,如下图:
在这里插入图片描述

Java流的分类

在这里插入图片描述

按流向分:

输入流: 程序可以从中读取数据的流。
输出流: 程序能向其中写入数据的流。

按数据传输单位分:

字节流: 以字节为单位传输数据的流
字符流: 以字符为单位传输数据的流

按功能分:

节点流: 用于直接操作目标设备的流
过滤流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。

常用的Java流

JDK所提供的所有流类位于java.io包中,分别继承自以下四种抽象流类,Java中其他多种多样变化的流均是由它们派生出来的

InputStream:

继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。

OutputSteam:

继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。

Reader:

继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。

Writer:

继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。

字符流

FileReader

用于读取字符文件的方便类。
FileReader是读取字符流。读取原始字节流,考虑使用FileInputStream。
在这里插入图片描述

常用构造方法

FileReader(File file) 参数是File对象
FileReader(String fileName) 参数是文件对象

方法摘要

public String getEncoding()
返回此流使用的字符编码的名称。

public void close()
关闭流并释放与它相关联的任何系统资源

public int read() throws IOException
读取单个字符。读出来的是ascii码,要把它赋值给Char才可以,而且每次读完下一次继续向下读

public int read(char[] cbuf,
int offset,
int length)
throws IOException
将字符读入一个数组的一部分

public boolean ready()
throws IOException
告诉是否该流已准备好阅读。

package io;
import java.io.*;
public class fileReader {
    public static void main(String[] args) {
        try {
//            两种获得文件句柄的方式
//            File file=new File("/home/jensen/ProgramData/intellij/forJob/src/io/dataDir/myproperty.txt");
//            FileReader fileReader=new FileReader(file);
            FileReader fileReader = new FileReader("/home/jensen/ProgramData/intellij/forJob/src/io/dataDir/myproperty.txt");
//            UTF-8
            System.out.println(fileReader.getEncoding());
//            106
            System.out.println(fileReader.read());
//            d
            System.out.println((char) fileReader.read());
            
            fileReader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
FileWriter
常用构造方法

FileWriter(File file)
构建了一个文件对象FileWriter对象。
FileWriter(File file, boolean append)
构建了一个文件对象FileWriter对象。append为true则追加,false则把文件抹掉重写

FileWriter(String fileName)
构造给定文件名的FileWriter对象。
FileWriter(String fileName, boolean append)
构造FileWriter对象给出一个文件名与一个布尔值,指示是否附加写入的数据。

方法摘要

public void write(int c)
throws IOException
写一个字符。

public void write(String str,
int off,
int len)
throws IOException
写入字符串的一部分。

public void write(String str)
throws IOException
写入字符串。

public void flush()
throws IOException
冲流。每次写完都要加这个方法才起作用

package io;
import java.io.*;
public class fileWriter {
    public static void main(String[] args) {
        try {
//            两种获得文件句柄的方式
//            File file=new File("/home/jensen/ProgramData/intellij/forJob/src/io/dataDir/myproperty.txt");
//            FileWriter fileWriter=new FileWriter(file);
            FileWriter fileWriter = new FileWriter("/home/jensen/ProgramData/intellij/forJob/src/io/dataDir/myproperty.txt",false);
            fileWriter.write("将被追加到文本最后");
            fileWriter.flush();
            fileWriter.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
BufferedReader

在这里插入图片描述
从一个字符输入流中读取文本,缓冲字符,以便提供字符、数组和行的有效读取。

常用构造方法

BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)
创建一个使用指定大小的输入缓冲区的缓冲字符输入流。

方法摘要

void close()
关闭流并释放与它相关联的任何系统资源。

Stream lines()
返回一个 Stream,其中的元素是线从这 BufferedReader读。

void mark(int readAheadLimit)
标记流中的当前位置。

int read()
读取单个字符。

int read(char[] cbuf, int off, int len)
将字符读入一个数组的一部分。

String readLine()
读一行文本。

boolean ready()
告诉是否该流已准备好阅读。

void reset()
将流到最近的标记。

long skip(long n)
跳过的字符。

package io;

import java.io.BufferedReader;
import java.io.FileReader;

public class bufferedReader {
    public static void main(String[] args) {
        try {
            BufferedReader bufferedReader = new BufferedReader(new FileReader("E:\\workspace\\intellij\\forJob\\src\\io\\dataDir\\myproperty.txt"));
            //读取一个字符
            char c=(char)bufferedReader.read();
            //逐行读取
            String s=null;
            while ((s=bufferedReader.readLine())!=null)
            System.out.println(s);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
InputStreamReader

InputStreamReader类是从字节流到字符流的桥接器:它使用指定的字符集读取字节并将它们解码为字符。
在这里插入图片描述

常用构造方法

InputStreamReader(InputStream in)
创建一个inputstreamreader使用默认字符集。

InputStreamReader(InputStream in, Charset cs)
创建一个inputstreamreader使用给定的字符集。

InputStreamReader(InputStream in, CharsetDecoder dec)
创建一个inputstreamreader使用给定的字符集解码。

InputStreamReader(InputStream in, String charsetName)
创建一个inputstreamreader使用指定的字符集。

方法摘要

void close()
关闭流并释放与它相关联的任何系统资源。
String getEncoding()
返回此流使用的字符编码的名称。
int read()
读取单个字符。
int read(char[] cbuf, int offset, int length)
将字符读入一个数组的一部分。
boolean ready()
告诉是否该流已准备好阅读。

字节流

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值