Java IO流之字符流的使用详解

作者:糊涂涂是个小盆友 时间:2023-10-18 11:28:08 

一、字符流的出现

中文在GBK中占有两个字节,在utf-8中占有三个字节(即需要三个字节才能组成一个中文字),字节流读取中文时由于编码集的不同,字节流读取中文也比较麻烦,从而出现了字符流

字符流也在java.io包下

二、字符输入流Reader

①、是一个接口类

②、里面提供了一些共性的方法,供子类使用

方法描述
int read()读取单个字符并返回
int read(char[] c)一次性读取多个字符,将数据放入数组
void close()释放资源

三、文件字符输入流 FileReader

①、FileReader extends InputStreamReader extends Reader

②、构造方法

FileReader(String filename)

FileReader(File file)

参数:读取文件的数据源

作用:创建FileReader对象、把FileReader对象指向要读取的文件

③、步骤

1、创建FileReader对象并绑定数据源

2、使用对象的read方法读取数据

3、释放资源

④、代码编程(读取单个字符)

import java.io.FileReader;
import java.io.IOException;

public class ReaderTest {
   public static void main(String[] args) {
       try {
           // 1、创建FileReader对象
           FileReader fr = new FileReader("E:\\JavaCode\\JavaSE\\Day8-24\\src\\a.txt");
           // 2、调用read方法
           int len = 0;
           while ((len = fr.read())!=-1){
               System.out.println((char)len);
           }
           // 3、释放资源
           fr.close();
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
}

⑤、代码编程(一次性读取多个字符)

try {
           // 1、创建FileReader对象
           FileReader fr = new FileReader("E:\\JavaCode\\JavaSE\\Day8-24\\src\\a.txt");
           // 2、调用read方法
           char[] c = new char[1024];
           int len = 0;
           while ((len = fr.read(c))!=-1){
               System.out.println(new String(c,0,len));
           }
           // 3、释放资源
           fr.close();
       } catch (IOException e) {
           e.printStackTrace();
       }

四、字符输出流 Writer

共性的成员方法

方法介绍
void write(int c)写入单个字符
void write(char[] c)写入字符数组
abstract void write(char[] c,int off,int len)写入字符数组的某一部分,off为数组的开始索引,len为写入的字符个数
void write(String str)写入字符串
void write(String str,int off,int len)写入字符串的某一部分,off为字符开始索引,len为写的字符个数
void flush()刷新该流的缓冲
void close()释放资源

五、文件字符输出流 FileWriter

①、FileWriter extends OutputStreamWriter extends Writer

②、构造方法

方法介绍
FileWriter (File file)根据给定的file对象构造一个FileWriter对象
FileWriter (String filename)根据给定 的文件名构造一个FileWriter对象

参数:写入数据的目的地

③、使用步骤

1、创建FileWriter对象,构造方法中绑定要写入数据的目的地

2、使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)

3、使用FileWriter中的方法flush,把内存缓冲区中的数据刷新到文件中(必须有这一步)

4、释放资源

④、代码描述

import java.io.FileWriter;
import java.io.IOException;

public class WriterTest {
   public static void main(String[] args) {
       try {
           // 1、创建对象
           FileWriter fw = new FileWriter("E:\\JavaCode\\JavaSE\\Day8-24\\src\\a.txt",true);
           // 2、写入数据
           fw.write("好么");
           // 3、刷新
           fw.flush();
           // 4、释放资源
           fw.close();
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
}

六、close()和flush()的区别

close()释放资源后不能够再使用流进行相关的操作

flush()刷新后还能够再操作

七、换行和续写

与字节流中的换行和续写一致

续写:

在使用构造函数的时候传入两个参数,第一个参数是文件的路径,第二个参数是是否续写(为true表示续写false则表示不续写直接覆盖)

换行:

在Windows系统中换行符号为 \r\n

在linux系统中换行符号为 /n

在Mac系统中换行符号为 /r

八、使用try-catch-finally处理流异常

try{
    可能会产出异常的代码
}catch(异常类变量 变量名){
    异常的处理逻辑
}finally{
    一定会执行的代码
    资源释放
}

今天只进行简单的介绍,后续会专门出一期jdk7和jdk9中处理流异常的对比

来源:https://blog.csdn.net/qq_52998673/article/details/126513062

标签:Java,IO流,字符流
0
投稿

猜你喜欢

  • c#之滚动字幕动画窗体的实现详解

    2022-02-14 08:46:19
  • C# protobuf自动更新cs文件

    2021-10-08 10:16:28
  • C#中在WebClient中使用post发送数据实现方法

    2023-05-01 00:03:54
  • Unity实现仿3D轮转图效果

    2023-11-24 12:26:56
  • Java中SpringSecurity密码错误5次锁定用户的实现方法

    2021-07-10 10:38:17
  • C#在子线程中更新窗口部件的写法

    2022-04-01 09:57:50
  • C#操作session的类实例

    2023-07-17 13:57:19
  • Java中synchronized正确使用方法解析

    2021-12-20 13:00:39
  • Android使用WebView实现文件下载功能

    2022-03-01 09:41:44
  • 详解Android使GridView横向水平滚动的实现方式

    2023-01-04 16:59:19
  • newtonsoft.json解析天气数据出错解决方法

    2022-03-10 12:23:21
  • Android发布项目到jitpack的完整步骤

    2021-11-29 08:42:10
  • Java JVM内存区域详解

    2021-05-25 18:44:43
  • 利用Kotlin开发你的第一个Android应用

    2022-04-23 14:39:53
  • JAVA Future类的使用详解

    2023-11-04 22:51:20
  • mybatis中使用oracle关键字出错的解决方法

    2022-05-14 10:19:23
  • SpringBoot如何进行对象复制的实践

    2023-11-23 03:40:19
  • Java内存溢出实现原因及解决方案

    2022-10-19 09:07:42
  • 基于Java Socket实现一个简易在线聊天功能(一)

    2023-09-23 17:18:35
  • Spring注解@Scope原理及用法解析

    2023-12-06 14:08:17
  • asp之家 软件编程 m.aspxhome.com