使用BufferedReader读取本地文件的操作

BufferedReader读取本地文件

在使用BufferedWriter写入文件时,如果忘记关闭文件(close)同时也没有调用flush(),则被写入的文件中是没有内容的。

在关闭文件的同时系统会自动调用flush()

 try {
   File file=new File("c://aa.txt");
   FileInputStream is=new FileInputStream(file);

   InputStreamReader reader=new InputStreamReader(is,"GBK");
   BufferedReader br=new BufferedReader(reader);
    String line=null;
   while ((line=br.readLine())!=null) {
    System.out.println(line);
   }
   reader.close();
   br.close();
   is.close();

  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

BufferedReader 读取文件内容,原样输出

1.新建目标类:

package com.xuzhiwen.io;
public class TargetFile {
    public static void main(String[] args) {
        System.out.println("TargetFile.java");
    }
}

2.测试类:

package com.xuzhiwen.io;
import java.io.BufferedReader;
import java.io.FileReader;
public class TestBufferedReader {
    public static void main(String[] args) throws Exception {
        String filepath = "src/com/xuzhiwen/io/TargetFile.java";
        BufferedReader read = new BufferedReader(new FileReader(filepath));
        String s;
        StringBuffer sb = new StringBuffer();
        while((s=read.readLine()) != null){
            sb.append(s+"\n");
        }
        read.close();
        System.out.println(sb);
    }
}

3.输出结果为:

4.文件结构树:

5. 将结果用StringReader再读一次:

package com.xuzhiwen.io;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.StringReader;
public class TestBufferedReader {
    public static void main(String[] args) throws Exception {
        String filepath = "src/com/xuzhiwen/io/TargetFile.java";
        BufferedReader read = new BufferedReader(new FileReader(filepath));
        String s;
        StringBuffer sb = new StringBuffer();
        while((s=read.readLine()) != null){
            sb.append(s+"\n");
        }
        read.close();
        System.out.println(sb);

        StringReader sr = new StringReader(sb.toString());
        int c;
        while((c=sr.read()) != -1){
            System.out.print((char)c);
        }
    }
}

6. 运行结果如下:

7. 将内容写入文件:

package com.xuzhiwen.io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.StringReader;
public class TestBufferedReader {
    public static void main(String[] args) throws Exception {
        String filepath = "src/com/xuzhiwen/io/TargetFile.java";
        BufferedReader read = new BufferedReader(new FileReader(filepath));
        String s;
        StringBuffer sb = new StringBuffer();
        while((s=read.readLine()) != null){
            sb.append(s+"\n");
        }
        read.close();
        System.out.println(sb);
        System.out.println("==============================================");

        StringReader sr = new StringReader(sb.toString());
        int c;
        while((c=sr.read()) != -1){
            System.out.print((char)c);
        }
        sr.close();

        System.out.println("==============================================");

        String file = "basic.out";
        BufferedReader br = new BufferedReader(new StringReader(sb.toString()));
        PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));

        int lineCount = 1;
        String ss;
        while((ss=br.readLine()) != null){
            pw.println(lineCount+":  "+ss);
            lineCount++;
        }
        pw.close();
    }
}

8. 运行结果:

9. 打开: basic.out文件:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2021-07-19

浅谈缓冲字符流 BufferedReader BufferedWriter用法

缓冲字符流BufferedReader和BufferedWriter 问题: 之前的文件读写都是按照字节.字符或者数组来实现的,对于文本文件而言,能否按照行,一行行读写呢. 提供了BufferedReader和BufferedWriter实现按行读写 package com.bjsxt.ios3; import java.io.*; public class TestBufferedReaderWriter { public static void main(String[] args) thr

Java BufferedWriter BufferedReader 源码分析

一:BufferedWriter 1.类功能简介: BufferedWriter.缓存字符输出流.他的功能是为传入的底层字符输出流提供缓存功能.同样当使用底层字符输出流向目的地中写入字符或者字符数组时.每写入一次就要打开一次到目的地的连接.这样频繁的访问不断效率底下.也有可能会对存储介质造成一定的破坏.比如当我们向磁盘中不断的写入字节时.夸张一点.将一个非常大单位是G的字节数据写入到磁盘的指定文件中的.没写入一个字节就要打开一次到这个磁盘的通道.这个结果无疑是恐怖的.而当我们使用Buffered

基于自定义BufferedReader中的read和readLine方法

实例如下所示: package day0208; import java.io.FileReader; import java.io.IOException; /* * 自定义读取缓冲区,实现BufferedReader功能 * 分析: * 缓冲区就是封装了一个数组,并对外提供了更多的方法对数组进行访问 * 其实这些方法最终操作的都是数组的角标 * 缓冲的原理: * 其实就是从源中获取一批数据装进缓冲区,再从缓冲区取出数据 * 当此次取完后,继续从源中取出一批数据到缓冲区 * 当源中的数据取光时

Java BufferedReader相关源码实例分析

1.案例代码 假设b.txt存储了abcdegfhijk public static void main(String[] args) throws IOException { //字符缓冲流 BufferedReader bufferedReader=new BufferedReader(new FileReader (new File("H:\\ioText\\b.txt")),8); //存储读取的数据 char[] charsRead=new char[5]; //读取数据 b

Java中BufferedReader类获取输入输入字符串实例

使用Scanner来取得使用者的输入很方便,但是它以空白来区隔每一个输入字符串,在某些时候并不适用,因为使用者可能输入一个字符串,中间会包括空白字元,而您希望取得完整的字符串. 您可以使用BufferedReader类别,它是java.io包中所提供的一个类,所以使用这个类时必须先import java.io包:使用BufferedReader对象的readLine()方法必须处理IOException异常(exception),异常处理机制是Java提供给程序设计人员捕捉程序中可能发生的错误所

自定义BufferedReader的实例

缓冲区的建立目的就是增加传输性能,使我们传输数据更加快速 缓冲区的内部其实很简单 就是在内部封装了一个数组 用数组来存储数据 对外提供一些方法对数组进行访问 其中这些方法的操作就是对数组的指针(角标). 缓冲区的原理:从源中获取一批数据到缓冲区,再从缓冲区中一个一个取出 取完后用-1作为结束标记 在BufferedReader中我们读取数据方法有read() ,readLine() read() 其参数为char[],cbuf,int off,int len.其返回值为-1 readLine()

微信公众号测试账号自定义菜单的实例代码

自定义菜单接口可实现多种类型按钮,如下: 1.click:点击推事件 用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event 的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互: 2.view:跳转URL 用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息. 3.scancode_push:扫码推事件 用户点击按钮后,微信客户

java 中自定义OutputFormat的实例详解

java 中 自定义OutputFormat的实例详解 实例代码: package com.ccse.hadoop.outputformat; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apa

IOS 开发之PickerView自定义视图的实例详解

IOS 开发之PickerView自定义视图的实例详解 例如选择国家,左边是名称右边是国家,不应该使用两列,而是自定义PickerView的一列,可以通过xib来实现. 注意,虽然PickerView也是一列,但是数据源方法是@required,所以必须实现. 因此,核心思想就是一列,自定义PickerView的行视图. 使用viewForRow方法可以设定行视图. 这样的视图可以通过xib和它的控制器进行封装: Xib的控制器继承自UIView类即可. 控制器维护一个用于设置数据的模型对象fl

java 自定义注解的实例详解

java  自定义注解的实例详解 Java的Annotation是在5.0版本之后引入的,可以用于创建文档,跟踪代码中的依赖性,并且可以执行编译时期检查.注解就是给虚拟机看的,代表程序的一些特殊的功能.JDK中提供了@Override,@SuppressWarning,@Deprecated三种注解,当让还有元注解,@Target,@Retention,@Documented,@Inherited,元注解的作用负责注解其它注解. 要想了解注解,就要了解自定义注解,了解是通过反射来实现的. 首先,

JavaScript实战(原生range和自定义特效)简单实例

今天我又码了两个特效:一个是用原生input[type=range]的,另一个完全自定义的:下面是完整代码和演示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> #tip{ position: absolute; top: 30px; left: 0; ri

Android 自定义ContentProvider简单实例

Android 自定义ContentProvider简单实例 Android允许我们定义自己的的ContentProvider对象来共享数据,练练手,简单来实现一下. 要使用ContentProvider来操作数据,必须要有保存数据的场所.可以使用文件或SQLite数据库的方式来保存数据,通常使用SQLite数据库. 1,创建一个数据库帮助类,归根结底都是它在操作数据库.代码如下: package com.njue; import android.content.Context; import

Python HTTP客户端自定义Cookie实现实例

Python HTTP客户端自定义Cookie实现实例 几乎所有脚本语言都提供了方便的 HTTP 客户端处理的功能,Python 也不例外,使用 urllib 和 urllib2 可以很方便地进行 HTTP GET 和 POST 等各种操作.并且还允许以类似于插件的形式加入一些 handler ,来定制 request 和 response ,比如代理的支持和 cookie 的支持都是这样添加进来的.具体来说,通过如下方式构造一个 opener : opener = urllib2.build_

Android 自定义标题栏的实例详解

 Android 自定义标题栏的实例详解 开发 Android APP 经常会用到自定义标题栏,而有多级页面的情况下还需要给自定义标题栏传递数据. 本文要点: 自定义标题填充不完整 自定义标题栏返回按钮的点击事件 一.代码 这里先介绍一下流程: 1. 创建一个标题栏布局文件 mytitlebar.xml 2. 在style.xml中创建 mytitlestyle 主题 3. 创建类 CustomTitleBar 4. 在需要自定义标题栏的Activity的OnCreate方法中实例化 Custo