IO流的字符流

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

 

                                        字符流
 1.字符流是什么


  字符流是可以直接读写字符的IO流
  字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出.   

 
 2.FileReader, FileWriter


  FileReader类的read()方法可以按照字符大小读取
  FileWriter类的write()方法可以自动把字符转为字节写出


 3.什么情况下使用字符流


  字符流也可以拷贝文本文件, 但不推荐使用. 因为读取时会把字节转为字符, 写出时还要把字符转回字节.
  程序需要读取一段文本, 或者需要写出一段文本的时候可以使用字符流


 4.带缓冲的字符流


  BufferedReader的read()方法读取字符时会一次读取若干字符到缓冲区, 然后逐个返回给程序, 降低读取文件的次数, 提高效率
  BufferedWriter的write()方法写出字符时会先写到缓冲区, 缓冲区写满时才会写到文件, 降低写文件的次数, 提高效率
  BufferedReader的readLine()方法可以读取一行字符(不包含换行符号)
  BufferedWriter的newLine()可以输出一个跨平台的换行符号"\r\n"


 5.LineNumberReader


  LineNumberReader是BufferedReader的子类, 具有相同的功能, 并且可以统计行号
  调用getLineNumber()方法可以获取当前行号
  调用setLineNumber()方法可以设置当前行号


 6.使用指定的码表读取字符


  FileReader是使用默认码表读取文件, 如果需要使用指定码表读取, 那么可以使用InputStreamReader(字节流,编码表)
  FileWriter是使用默认码表写出文件, 如果需要使用指定码表写出, 那么可以使用OutputStreamWriter(字节流,编码表)
 
 定义一个字符数组的复制实例:

package cn.itcast.io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Demo3_Copy {

	/**
	 * @param args
	 * @throws IOException 
	 * flush和close的区别
	 * flush方法可以将缓冲区的数据刷到文件上,调用之后还以继续调用写的方法
	 * close方法可以关闭流,在关闭流之前会将缓冲区中的有效字符数据刷出,然后再关闭,如果关闭就不能再调用写的方法
	 */
	public static void main(String[] args) throws IOException {
		FileReader fr = new FileReader("day22笔记.txt");
		FileWriter fw = new FileWriter("copy.txt");
		char[] arr = new char[1024];
		int len;
		while((len = fr.read(arr)) != -1) {
			fw.write(arr, 0, len);
		}
		
		fr.close();
		fw.close();
	}
}


自带缓冲区的复制实例:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Demo3_Copy {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader("day22笔记.txt"));
		BufferedWriter bw = new BufferedWriter(new FileWriter("copy.txt"));
		
		int ch;
		while((ch = br.read()) != -1) {
			bw.write(ch);
		}
		bw.close();
		br.close();
	}
}

 

BufferredReadew 的read方可以读取一整行字符串,BufferedWriter的writeLine可以
 写出字符串
 换行 的方法是newLine  在windows系统中可以使用\r\n
 读取一整行的复制的实例:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Demo3_Copy {
	BufferedReader br = new BufferedReader(new FileReader("day22笔记.txt"));
		BufferedWriter bw = new BufferedWriter(new FileWriter("copy.txt"));
		
		String line;
		while((line = br.readLine()) != null) {
			bw.write(line);
			//bw.write("\r\n");				//只支持windows系统
			bw.newLine();					//可以跨平台的,支持任意系统
		}
		
		br.close();
		bw.close();
	}
}	



 

带开环升压转换器和逆变器的太阳能光伏系统 太阳能光伏系统驱动开环升压转换器和SPWM逆变器提供波形稳定、设计简单的交电的模型 Simulink模型展示了一个完整的基于太阳能光伏的直到交电力转换系统,该系统由简单、透明、易于理解的模块构建而成。该系统从配置为提供真实直输出电压的光伏阵列开始,然后由开环DC-DC升压转换器进行处理。升压转换器将光伏电压提高到适合为单相全桥逆变器供电的稳定直链路电平。 逆变器使用正弦PWM(SPWM)开关来产生干净的交输出波形,使该模型成为研究直-交转换基本操作的理想选择。该设计避免了闭环和MPPT的复杂性,使用户能够专注于光伏接口、升压转换和逆变器开关的核心概念。 此模型包含的主要功能: •太阳能光伏阵列在标准条件下产生~200V电压 •具有固定占空比操作的开环升压转换器 •直链路电容器,用于平滑和稳定转换器输出 •单相全桥SPWM逆变器 •交负载,用于观察实际输出行为 •显示光伏电压、升压输出、直链路电压、逆变器交波形和负载电的组织良好的范围 •完全可编辑的结构,适合分析、实验和扩展 该模型旨在为太阳能直-交转换提供一个干净高效的仿真框架。布局简单明了,允许用户快速了解信号,检查各个阶段,并根据需要修改参数。 系统架构有意保持模块化,因此可以轻松扩展,例如通过添加MPPT、动态负载行为、闭环升压控制或并网逆变器概念。该模型为进一步开发或整合到更大的可再生能源模拟中奠定了坚实的基础。
<think>我们正在处理用户关于JavaIO字符流的使用教程请求。根据提供的引用,我们可以总结出以下关键点:1.字符流用于处理文本数据(如文本文件)。2.主要抽象类:Reader(输入)和Writer(输出)。 3.常见实现类:FileReader、FileWriter、BufferedReader、BufferedWriter。4.使用字符流可以避免字节处理文本时可能出现的乱码问题(因为字符流会处理字符编码)。用户需要教程和示例,因此我们将提供:-字符流的基本概念-常用字符流类的使用示例(包括文件读写、缓冲的使用)-注意事项(如字符编码、异常处理等) 同时,我们将按照用户要求:-使用中文回答-在行内数学表达式(如果有)使用$...$(但本问题可能不涉及数学表达式) -独立公式单独成段(同样,本问题可能不涉及) -生成相关问题注意:引用中提到了字符编码(引用[4])和字节读取中文乱码问题(引用[3]),这些内容需要整合到回答中。回答结构: 1.字符流概述2.字符流的核心类3.文件字符流示例(FileReader/FileWriter) 4.缓冲字符流示例(BufferedReader/BufferedWriter) 5.字符编码的重要性6.注意事项7.生成相关问题引用标注:在回答中,我们将在适当位置标注引用(如引用[1],[2]等),但注意引用内容已经给出,我们只需在回答中自然引用。现在开始编写回答:</think>### Java IO字符流使用教程 Java字符流专为处理文本数据设计,能自动处理字符编码问题,避免字节操作文本时可能出现的乱码。主要抽象类为**Reader**(输入)和**Writer**(输出),以下是核心使用方法和示例: --- #### 一、字符流核心类 1. **文件读写类** - `FileReader`:从文件读取字符 - `FileWriter`:向文件写入字符 2. **缓冲(提升效率)** - `BufferedReader`:带缓冲区的字符输入(支持`readLine()`) - `BufferedWriter`:带缓冲区的字符输出(支持`newLine()`) --- #### 二、基础使用示例 ##### 示例1:文件复制(`FileReader` + `FileWriter`) ```java import java.io.*; public class CharStreamDemo { public static void main(String[] args) { try (Reader reader = new FileReader("input.txt"); Writer writer = new FileWriter("output.txt")) { int c; while ((c = reader.read()) != -1) { // 逐字符读取 writer.write(c); // 逐字符写入 } System.out.println("文件复制完成!"); } catch (IOException e) { e.printStackTrace(); } } } ``` ##### 示例2:缓冲高效读写(`BufferedReader` + `BufferedWriter`) ```java try (BufferedReader br = new BufferedReader(new FileReader("input.txt")); BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) { String line; while ((line = br.readLine()) != null) { // 整行读取 bw.write(line); // 整行写入 bw.newLine(); // 写入换行符 } System.out.println("缓冲操作完成!"); } catch (IOException e) { e.printStackTrace(); } ``` --- #### 三、关键注意事项 1. **字符编码处理** - 默认使用系统编码(如UTF-8),可显式指定编码: ```java Reader reader = new InputStreamReader( new FileInputStream("data.txt"), "GBK"); // 指定GBK编码 ``` - 编码不一致会导致乱码(引用[3]中字节读取中文乱码问题)[^3]。 2. **异常处理** - 必须用`try-with-resources`或`finally`块关闭,防止资源泄漏。 3. **性能优化** - 小文件:直接用`FileReader/FileWriter` - 大文件:务必使用`BufferedReader/BufferedWriter`减少I/O操作次数[^2]。 --- #### 四、字符集使用(编码/解码) ```java import java.util.Arrays; public class EncodingDemo { public static void main(String[] args) throws Exception { String text = "Java你好"; // 编码为字节序列(UTF-8) byte[] bytes = text.getBytes("UTF-8"); System.out.println(Arrays.toString(bytes)); // 解码还原字符串 String decoded = new String(bytes, "UTF-8"); System.out.println(decoded); // 输出: Java你好 } } ``` > 注:若不指定编码,将使用平台默认编码(引用[4])[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值