博客
关于我
一篇文章带你搞定 Java 中字符流的基本操作(Write / Read)
阅读量:348 次
发布时间:2019-03-04

本文共 2544 字,大约阅读时间需要 8 分钟。

Java 字符流操作详解

字符流在Java程序中用于处理文本数据的读取和写入,Writer和Reader类为字符流提供了基本操作接口。本文将详细介绍Writer和Reader的使用方法,以及字节流与字符流的区别。

一、字符输出流 Writer

Writer类是Java用于字符流输出的核心类,主要用于向文件或其他输出设备中写入文本数据。

1. 向文件中写入数据

使用Writer类操作文件,流程与字节流操作类似,但更加简便。

import java.io.File;import java.io.FileWriter;public class Root {    public static void main(String[] args) throws Exception {        File f = new File("D:" + File.separator + "test.txt");        FileWriter out = new FileWriter(f);        String str = "Hello World !!!";        out.write(str);        out.close();    }}

2. 使用 FileWriter 追加文件内容

FileWriter支持动态追加文件内容,可通过第二个参数true开启追加模式。

public class Root {    public static void main(String[] args) throws Exception {        File f = new File("D:" + File.separator + "test.txt");        FileWriter out = new FileWriter(f, true);        String str = "\r\n Java Hello World !!!";        out.write(str);        out.close();    }}

二、字符输入流 Reader

Reader类用于从字符流中读取文本数据,主要用于文件的字符读取操作。

1. 从文件中读取内容

使用Reader类可以直接读取字符,适用于文本文件的处理。

import java.io.File;import java.io.FileReader;public class Test {    public static void main(String[] args) throws Exception {        File f = new File("D:" + File.separator + "test.txt");        FileReader reader = new FileReader(f);        char[] c = new char[1024];        int len = reader.read(c);        System.out.println("内容为:" + new String(c, 0, len));        reader.close();    }}

2. 使用循环的方式读取内容

当不知道文件长度时,可以使用循环读取字符。

char[] c = new char[1024];int len = 0;int temp = 0;while ((temp = reader.read()) != -1) {    c[len++] = (char) temp;}System.out.println("内容为:" + new String(c, 0, len));reader.close();

三、字节流与字符流的区别

1. 缓冲区的使用

字符流在读取或写入时会使用内置缓冲区,提高读写效率,而字节流直接操作文件,不使用缓冲区。

2. 关闭操作的影响

  • 字节流:关闭后仍会将缓冲区内容写入文件。
  • 字符流:关闭后不会自动写入缓冲区内容,必须手动flush。

3. 适用场景

  • 字节流:适用于处理非文本文件(如图片、音视频等),文件操作直接基于字节。
  • 字符流:适用于处理文本文件,提供更高级别的操作接口。

四、文件复制方法

1. 边读边写方式

这种方法适用于大文件复制,避免占用过多内存。

import java.io.*;public class Copy {    public static void main(String[] args) throws Exception {        if (args.length != 2) {            System.out.println("输入的参数不正确!");            System.exit(1);        }        File f1 = new File(args[0]);        File f2 = new File(args[1]);        if (!f1.exists()) {            System.out.println("源文件不存在!");            System.exit(1);        }        InputStream input = new FileInputStream(f1);        OutputStream out = new FileOutputStream(f2);        while ((temp = input.read()) != -1) {            out.write(temp);        }        System.out.println("复制完成");        input.close();        out.close();    }}

通过以上方法,可以高效地完成文件复制任务。字符流的边读边写方式在处理大文件时表现更优,避免了内存过载问题。

转载地址:http://fixr.baihongyu.com/

你可能感兴趣的文章
错误: 编码GBK的不可映射字符
查看>>
linux文件的权限 –rwxr-xr-x是什么意思,怎样变更文件夹以及下面所有文件的拥有者。
查看>>
Python-Url编码和解码
查看>>
2019年一个程序员的回顾与成长计划
查看>>
vue 双项绑定的实例 货币转换
查看>>
vue if else用法。
查看>>
vue 官方实例教程 markdown demo
查看>>
Python数据类型 列表、元组、集合、字典的区别和相互转换
查看>>
宝塔配置404 502页面
查看>>
Mac OS X 下 su 命令提示 sorry 的解决方法
查看>>
vue-router 缓存路由组件对象
查看>>
js中事件捕获和事件冒泡(事件流)
查看>>
js的各种数据类型判断(in、hasOwnProperty)
查看>>
严格模式、混杂模式与怪异模式
查看>>
一篇文章带你搞定 Java 中字符流的基本操作(Write / Read)
查看>>
HTML 和 CSS 简单实现注册页面
查看>>
(SpringMVC)springMVC.xml 和 web.xml
查看>>
Oracle 学习一篇文章就够了(珍藏版)
查看>>
一篇文章带你搞定 Oracle 的体系结构
查看>>
Oracle 单行函数
查看>>