IO之字符流

2023-10-27

1.字符输出流

public abstract class Writer extends Object implement Appendable,Closeabel,Flushable

写入字符流的抽象类。子类必须实现的方法仅有write(char[ ],int,int)、flush()和close()。但是,多数子类将重写此处定义的一些方法,以提供更高效和/或其他功能。

方法名称 描述
public void write(String str) throws IOException 直接将字符串写入输出
public void write(char[ ] cbuf) throws IOException 输出字符数组
public abstract void close( ) throws IOException 关闭
public abstract void flush( ) throws IOException 刷新

与OutputStream一样 ,对文件的操作使用:

FileWrite类完成,此类的构造方法如下:

方法名称 描述
public File Writer(File file) throws IOException 根据File类构造FileWriter实例
public FileWriter(File file,boolean append)throws IOException 根据File类构造File Writer实例,可以追加内容

2.字符输入流

public abstract class Reader extends Object implements Readable,Closeable

用于读取字符流的抽象类。子类必须实现的方法只有read(char[ ],int,int)和cloase( )。

但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。

方法名称 描述
public int read( ) throws IOException 读取一个内容
public int read (char[ ] cbuf)throws IOException 读取一组内容,返回读入的大小
public abstract  void close() throws IOException 关闭

使用FileReader类进行实例化操作,FileReader类中的构造方法定义如下:

方法名称 描述
public FileReader(File file)throws FileNotFoundException 接收File类的实例


3.字节流与字符流的区别

在所有的流操作里。字节永远是最基础的。任何基于字节的操作都是正确的。无论你是文本文件还是二进制的文件。


如果确定流里面只有可打印的字符,包括英文的和各种国家的文字,也包括中文,那么可以考虑用字符流。


由于编码不同,多字节的字符可能占用多个字节。比如GBK的汉字就占用2个字符,而UTF-8的汉字就占用3个字节。


所以,字符流是根据指定的编码,将1个或多个字节转化为java里面的unicode的字符,然后进行操作。


字符操作一般使用Writer,Reader等,字节操作一般都是InputStream,OutputStream以及各种包装类,比如BufferedInputStream和BufferedOutputStream等


总结:如果你确认你要处理的流是可打印的字符,那么使用字符流会看上去简单一点,如果不确认,那么用字节流中是不会错的。



package com.vince.charstream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;

public class ReaderDemo {

	/**
	 * 字符输入流方式一:使用指定大小的字符数组输入
	 */
	public static void reader1(){
		File f = new File("d:\\董学姐.txt");
		try {
			//构造一个字符输入流对象
			Reader in = new FileReader(f);
			char[] cs = new char[20];
			int len = -1;
			StringBuffer sb = new StringBuffer();
			while((len = in.read(cs))!=-1){
				sb.append(new String(cs,0,len));
			}
			//关闭流
			in.close();
			System.out.println(sb);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	/**
	 * 使用字节流读取文本文件
	 */
	public static void byteReader(){
		File f = new File("d:\\董学姐.txt");
		try {
			InputStream in = new FileInputStream(f);
			byte[] bytes = new byte[20];
			int len = -1;
			StringBuffer sb = new StringBuffer();
			while((len = in.read(bytes))!=-1){
				sb.append(new String(bytes,0,len));
			}
			in.close();
			System.out.println(sb);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	public static void main(String[] args) {
//		byteReader();
		reader1();
	}

}


package com.vince.charstream;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class WriterDemo {

	
	/**
	 * 字符输出流方式一:以字符数组方式输出
	 */
	public static void writer1(){
		File f = new File("d:\\2.txt");
		try {
			//构造一个字符输出流对象(true表示追加输出)
			Writer out = new FileWriter(f,true);
			
			String info = "good good study,day day up!";
			//向文件中输出
//			out.write(info.toCharArray());
			out.write(info);
			//关闭流
			out.close();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		writer1();
	}

}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IO之字符流 的相关文章

随机推荐

  • 跨平台原理:

    跨平台原理 Java中存在Java虚拟机 可以将JAVA程序翻译成对应平台可以执行的程序进行运行 Java程序可以一处编译 到处运行 即java编译时将 java文件转换为无关平台的字节码 class文件 而虚拟机将 class文件翻译给不
  • 分布式发布订阅消息系统—Apache Kafka

    1 什么是Kafka Kafka是一种高吞吐量的分布式发布订阅消息系统 它可以处理消费者规模的网站中的所有动作流数据 这种动作 网页浏览 搜索和其他用户的行动 是在现代网络上的许多社会功能的一个关键因素 这些数据通常是由于吞吐量的要求而通过
  • 基于ant design vue实现的多层菜单组件封装

    菜单组件 不同于树组件的是 树组件可以选很多个 而菜单组件只可以选择一个 这里放上我的源代码 current 是默认选择的节点 是一个数组current 5 3 1 默认选择的节点 openKeys是默认展开的节点 也是一个数组openKe
  • ajax无法发送json串,Ajax检索Json字符串,但无法将成功数据循环为对象

    我的项目是用d3 js绘制grahp 我发现了一些php代码 这绝对是我想要的 但我正在与C 和主场迎战所以我把它转换成asp net 首先 我想编写一些硬编码数据样本并使用d3 js绘制图像 以及该PHP项目的JavaScript代码 现
  • React Hook 之 useMemo及 React.memo

    一 useMemo const memoizedValue useMemo gt computeExpensiveValue a b a b 返回一个 memoized 值 把 创建 函数和依赖项数组作为参数传入 useMemo 它仅会在某
  • 2021泰迪杯数据分析技能赛B题-肥料登记数据分析

    调用模块 import numpy as np import pandas as pd import matplotlib pyplot as plt import seaborn as sns plt rcParams font fami
  • iic通信原理_血氧饱和度传感器MAX30102模块的原理及编程

    一 简介 MAX30102是一个集成的脉搏血氧仪和心率监测仪生物传感器的模块 芯片 它集成了一个660nm红光LED 880nm红外光LED 光电检测器 光器件 以及带环境光抑制的低噪声电子电路 可通过软件关断模块 待机电流为零 实现电源始
  • OpenCV Mat类型及convertTo转换

    类型 在 Android OpenCv中给我们返回的 type 直接是 CV 8UC4 但是 在 C 中返回的是 16 等这些整型 所以 我找了个对照表 表头的 C1 C2 C3 C4 指的是通道 Channel 数 比如灰度图像只有 1
  • 获取当前访问的部分虚拟路径(Request.Url.GetLeftPart)

    Request Url GetLeftPart的应用 发送按钮
  • 2023牛寒2--Tokitsukaze and K-Sequence

    Tokitsukaze 有一个长度为 n 的序列 a 她想把这个序列划分成 k 个非空子序列 定义序列的值为这个序列中只出现一次的数字的个数 对于 k 1 n Tokitsukaze 想知道把序列 a 划分成 k 个非空子序列后 所有子序列
  • GCD->OC

    VHAsyncRun h VHAsyncRun h VHUpload Created by vhall on 2019 11 7 Copyright 2019 vhall All rights reserved typedef void V
  • 20230601

    20230703 mockito when 不生效 掘金 Java 单元测试 3 mock进阶 静态 final 私有方法mock 掘金 Mockito与PowerMock的使用基础教程 掘金 System out println Syst
  • Linux--数据链路层--ARP协议--0319-21

    目录 1 认识以太网 1 1 以太网帧格式 1 2 基于以太网帧简单模拟局域网通信 问题一 如果有多台主机都在发送数据呢 问题二 发送方知不知道自己的数据被影响了呢 1 3 MTU 1 3 1 MTU对IP协议的影响 1 3 2 MTU对U
  • C++之关联容器的erase使用

    对于关联容器 如map set multimap multiset 删除当前的iterator 仅仅会使当前的iterator失效 只要在erase时 递增当前的iterator即可 这是因为map之类的容器 使用了红黑树来实现 插入 删除
  • 软件工程提问回顾与个人总结

    项目 内容 作业所属课程 软件工程班级博客 作业要求请点击链接查看 作业要求 我在这个课程的目标 学习如何用工程化方法构建和维护软件 这个作业在哪个具体方面帮助我实现目标 通过回顾整个课程的学习 思考总结获得的收获 一 以前提问题的博客 提
  • Qt知识点梳理 —— 无边框图片背景窗体实现

    文章目录 实现效果 创建项目 项目源码 开发环境 实现效果 创建项目 首先创建项目 选择QMainWindow或者QWidget都可以 窗体中加入Layout 选择Vertical Layout或者Horizontal Layout都可以
  • Microsoft Office Word 2016关闭时无响应卡顿的解决方法

    1 在控制面板中找到Microsoft office 2 右键单击选择更改 3 尝试 Quick Rapair 4 等待修复 如果Quick Rapair修复完成还没有解决问题 选择Online repair 再尝试
  • Python入门第五天——[小甲鱼]零基础入门学习Python

    046 property方法的原理 property方法的原理 描述符 描述符就是将某种特殊类型的类的实例指派给另一个类的属性 MyDecriptor就是x的描述符 所以MyDecriptor类就是一个描述符类 通常带有get set和de
  • 关于Vue.config.devtools与Vue.config.productionTip

    1 关于Vue config devtools 1 类型 boolean 2 默认值 true 生产版为 false 3 用法 务必在加载 Vue 之后 立即同步设置以下内容 一般在main js中 Vue config devtools
  • IO之字符流

    1 字符输出流 public abstract class Writer extends Object implement Appendable Closeabel Flushable 写入字符流的抽象类 子类必须实现的方法仅有write