一、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子类InputSteamReader和FileReader使用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);
}

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

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

    [Java]读取文件方法大全   1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile {     /**     ...

  2. java读取文件夹下所有文件并替换文件每一行中指定的字符串

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...

  3. Java 读取文件的内容

    Java 读取文件的内容 1) CLASS_NAME: 换成自己真实的类名 2) /page/test.json: 换成自己真实的page 3) FileUtils: 来自于org.apache.co ...

  4. java 读取文件——按照行取出(使用BufferedReader和一次将数据保存到内存两种实现方式)

    1.实现目标 读取文件,将文件中的数据一行行的取出. 2.代码实现 1).方式1: 通过BufferedReader的readLine()方法. /** * 功能:Java读取txt文件的内容 步骤: ...

  5. Java读取文件方法和给文件追加内容

    本文转载自:http://www.cnblogs.com/lovebread/archive/2009/11/23/1609122.html 1.按字节读取文件内容2.按字符读取文件内容3.按行读取文 ...

  6. java的new BufferedReader(new InputStreamReader(System.in))

    流 JAVA /IO 基本小结 通过一行常见的代码讨论:new BufferedReader(new InputStreamReader(System.in)) /*** *** 看到这篇文章挺好的, ...

  7. java读取文件方法总结

    由于最近在做一个关于从手机本地读取格式化的txt文件中的内容,并且把内容放在listview中显示.这样问题来了,就是如何能够遍历已经获取到特定的map中就是一个问题,在网上找了一些资料,找到了一个很 ...

  8. java 读取文件的路径

    1. 通用定位到用户目录下:   String userDir = System.getProperty("user.dir"); 2. web项目定位到WEB-INF/class ...

  9. java 读取文件乱码

    private void filereader() throws IOException{  BufferedReader bf= new BufferedReader(new InputStream ...

随机推荐

  1. Linux配置和管理msyql命令

    配置和管理msyql: 1. 修改mysql最大连接数:cp support-files/my-mediuf,vim my.cnf,增加或修改max_connections=1024 关于my.cnf ...

  2. 31.用 CSS 的动画原理,创作一个乒乓球对打动画

    原文地址:https://segmentfault.com/a/1190000015002553 感想:纯属动画 HTML代码: <div class="court"> ...

  3. 记一次恐怖的 Integer 溢出

    一不注意, 看起来ok 的地方都出问题了! 后来才突然想起,原来是 Integer 溢出啊 这样的代码, 没想到也会出问题. public static final long Cap_Size = 9 ...

  4. PHP企业微信配置点击事件。

    1. 2. 3.URL接受值进行签名验证. <?phpinclude_once "../commmm/WXBizMsgCrypt.php";/*微信提供 demo*/// 假 ...

  5. Linux定时任务 结合PHP实现实时监控

    首先说说cron,它是一个linux下的定时执行工具.根用户以外的用户可以使用 crontab 工具来配置 cron 任务. 所有用户定义的 crontab 都被保存在/var/spool/cron ...

  6. <记录> PHP Redis操作类

    namespace common\controller; class Redis { public $redisObj = null; //redis实例化时静态变量 static protected ...

  7. tp5中ajax方式提交表单

    用ajax提交表单,迅速,快捷,实现页面无刷新提交表单. <!DOCTYPE html> <html lang="en"> <head> < ...

  8. category,extension区别

    extension是在编译的时候就决定了的,跟普通的头文件是一样的,所以可以添加属性.实例变量.方法.并且添加extension的前提是你有这个类的源代码. category是在程序运行的时候才决定的 ...

  9. python 可迭代对象与迭代器

    生成器函数的工作原理只要 Python 函数的定义体中有 yield 关键字, 该函数就是生成器函数. 调用生成器函数时, 会返回一个生成器对象. 也就是说, 生成器函数是生成器工厂. 调用生成器函数 ...

  10. 服务发现 - consul 的介绍、部署和使用(转)

    什么是服务发现 相关源码: spring cloud demo 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是 ...