Java读取文件-BufferedReader/FileReader/InputStreamReader/FileInputStream的关系和区别

一、Java读取和存储文件数据流

Java读取文件,实际是将文件中的字节流转换成字符流输出到屏幕的过程

这里面涉及到两个类:InputStreamReader和OutputStreamWriter

InputStreamReader:将字节流转换成字符流

OutputStreamWriter:将字符流转换成字节流

InputStreamReader继承Reader类

OutputStreamWriter继承Writer类

二、BufferedReader/FileReader/InputStreamReader

Reader是用于将文件中的内容读出来;Writer用于将字符写入到文件中去。

Reader是用于读取字符流的抽象类

1、BufferedReader/FileReader/InputStreamReader的继承关系如下:

所以通过BufferedReader/FileReader/InputStreamReader这三个方法读出来的文件,都可以直接输出字符

2、BufferedReader/FileReader/InputStreamReader的使用方法及区别

InputStreamReader:可以指定字符编码格式,入参传递InputStream对象

InputStream对象定义方法有两种。System.in或FileInputStream对象

System.in:读取控制台的输入内容

FileInputStream:可通过文件路径名pathname或File对象实例化

InputStreamReader inputstreamreader1=new InputStreamReader(System.in);
InputStreamReader inputstreamreader2=new InputStreamReader(new FileInputStream("/opt/xxx"));
InputStreamReader inputstreamreader3=new InputStreamReader(new FileInputStream(new File("/opt/xxx")));

FileReader:入参直接传递文件pathname或File对象

FileReader是InputStreamReader的子类,不能指定字符编码,其他与InputStreamReader基本类似

FileReader f1=new FileReader("/opt/xxx.txt");
FileReader f2=new FileReader(new File("/opt/xxx.txt"));

BufferedReader:入参有Reader对象和缓冲区大小(可不写)

从缓存区中读取字符流,提高效率;缓冲区大小:默认8192,默认不需要传递

建议都要用这个类去读取文件

BufferedReader buffered_filereader=new BufferedReader(new FileReader(filename));
BufferedReader buffered_inputstreamreader=new BufferedReader(new InputStreamReader(fileinputstream));

三、FileInputStream

所有字节输入流的超类,用于字节流的读取。

上面已经讲了,应用在实例化InputStreamReader对象时的一种入参

可以传递文件路径名pathname或File对象实例化

四、读取文件

BufferedReader对象使用readLine()方法判断字符串是否为null判断是否为文件末尾

String read;
while((read=buffered_filereader.readLine())!=null){
    System.out.println(read);
}

Reader对象使用read()方法判断是否为-1,来判断是否为文件末尾

int i;
while ((i=filereader.read())!=-1){
    System.out.print((char)i);
}

五、Java代码

1、InputSteamReader

String filename="/opt/xxx.log";

FileInputStream fileinputstream=new FileInputStream(filename);
InputStreamReader inputstreamreader=new InputStreamReader(fileinputstream);
int i;
while ((i=inputstreamreader.read())!=-1){
    System.out.print((char)i);
}

2、FileReader

String filename="/opt/xxx.log";

FileReader filereader=new FileReader(filename);
int i;
while ((i=filereader.read())!=-1){
    System.out.print((char)i);
}

3、BufferedReader(入参FileReader)

String filename="/opt/xxx.log";

FileReader filereader=new FileReader(filename);
BufferedReader buffered_filereader=new BufferedReader(filereader);
String read;
while((read=buffered_filereader.readLine())!=null){
    System.out.println(read);
}

4、BufferedReader(入参InputStreamReader)

String filename="/opt/xxx.log";
FileInputStream fileinputstream=new FileInputStream(filename);
InputStreamReader inputstreamreader=new InputStreamReader(fileinputstream);
BufferedReader buffered_inputstreamreader=new BufferedReader(inputstreamreader);
String read;
while((read=buffered_inputstreamreader.readLine())!=null){
    System.out.println(read);
}

原文地址:https://www.cnblogs.com/meitian/p/8992769.html

时间: 2025-01-05 09:19:50

Java读取文件-BufferedReader/FileReader/InputStreamReader/FileInputStream的关系和区别的相关文章

[Java]读取文件方法大全(转)

[Java]读取文件方法大全 1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile {    /**     * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件.     */    public static void readFileByBytes(String fileName) {        File file = new File(fileName);        Input

【转】Java读取文件方法大全

本文转自:http://www.cnblogs.com/lovebread/archive/2009/11/23/1609122.html#undefined 目录: 按字节读取文件内容 按字符读取文件内容 按行读取文件内容 随机读取文件内容 将内容追加到文件尾部 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fil

Java读取文件,将字符串转化成日期类型,将日期类型进行加减

最近总用Java读取文件,发现了一种我个人觉得比较好的方法,现在分享给大家 public static void main(String[] args) throws Exception { FileInputStream f = new FileInputStream("文件路径"); InputStreamReader fileInputStream = new InputStreamReader(f); BufferedReader br = new BufferedReader

使用java读取文件夹中文件的行数

使用java统计某文件夹下所有文件的行数 经理突然交代一个任务:要求统计某个文件夹下所有文件的行数.在网上查了一个多小时没有解决.后来心里不爽就决定自己写一个java类用来统计文件的行数,于是花了两个小时将代码写出(可见我的java功底还是挺烂的).虽然有很多有待改进的地方,依然有纪念意义. 本java类的核心是通过BufferedReader类的readLine()方法,间接的统计行数:通过递归遍历文件. 这个类只是写来完成任务的.结果不是很严谨,许多情况并没考虑到:比如判断想读取某一类文件怎

Java读取文件的问题

java读取文件的两种方法:java.io和java.lang.ClassLoader (我就知道这两种.....) // java.io: File file = new File("..."); FileInputStream fis = new FileInputStream("..."); FileReader fr = new FileReader("..."); //ClassLoader: ClassLoader loader =

Java读取文件的注意点

关于Java读取UTF-8和UTF-8 BOM文件的问题记录在此,仅给自己提个醒. 今天从文本文件中读取数据存储到数据库中,操作完之后检验数据库发现有一些记录出现差错,几经排查(╮(╯Д╰)╭,自己忘了把异常输出,费了不少时间.),发现都是每个文本文件下的第一行出现差错,终于找到原因了,是文件的编码惹的祸.存储数据的文本文件编码类型为UTF-8 BOM,文件编码类型该了一下,再一检验,问题解决. 处理方法可以参考http://www.2cto.com/kf/201108/98509.html J

Java读取文件夹大小的6种方法及代码

这篇文章介绍了JAVA读取文件夹大小的几种方法实例,有需要的朋友可以参考一下. (一)单线程递归方式 package com.taobao.test; import java.io.File; public class TotalFileSizeSequential { public static String fileName = "C:\\Documents and Settings\\Administrator\\桌面\\monkeytalk"; // 递归方式 计算文件的大小

java读取文件最后N行

原文:java读取文件最后N行 源代码下载地址:http://www.zuidaima.com/share/1550463669226496.htm 指定行数,可以获取到从这行到文件尾的所有行,分享自大熊. 源文件: 读取最后10行结果 import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.util.ArrayList; import java.util.List

Java读取文件 利用MappedByteBuffer进行缓冲

Java读取文件 利用MappedByteBuffer进行缓冲,这样可以保证边读取大文件,边进行处理 package sean; import java.io.ByteArrayInputStream; import java.io.File; import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.util.Scann