Java笔记26
字符编码
- 常见的字符编码:
编码方式 | 说明 |
---|---|
SO-8859-1 | 收录除ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号 |
UTF-8 | 针对Unicode码表的可变长度字符编码 |
GB2312 | 简体中文 |
GBK | 简体中文、扩充 |
BIG5 | 台湾,繁体中文 |
- 当编码方式和解码方式不一致时,会出现乱码。
字符流
- 字符流的父类(抽象类):
Reader
:字符输入流Writer
:字符输出流
文件字符流
FileReader
- 常用方法:
public int read() //读取一个字符
public int read(char[] cbuf) //从流中读取多个字符,将读到内容存入字符数组cbuf(缓冲区)中,返回实际读到的字符数;如果达到文件的尾部,则返回-1
public int read(char[] cbuf, int offset, int length) //将最多length个字符的数据从此输入流读入字符数组cbuf(缓冲区)中。
//参数:cbuf - 目的缓冲区; off - 目标数组cbuf的起始偏移量; length - 要读取的最大字符数;
- 练习:
FileReader
的使用: - 首先,我们在
d:\\JavaTest\\
目录下创建一个文本文件hello.txt
:
- 然后,我们往刚才创建的文本文件
hello.txt
中添加一段字符串数据:
- 接着,我们来尝试使用
FileReader
提供的方法读取我们刚才添加的数据:
package com.clown.io;
import java.io.FileReader;
/*
FileReader的使用:
文件字符输入流
*/
public class FileReaderDemo01 {
public static void main(String[] args) throws Exception {
//1. 创建文件字符输入流(FileReader),并指定文件路径
FileReader fr = new FileReader("d:\\JavaTest\\hello.txt");
//2. 读取文件
/*
//2.1 一次读取单个字符
int data = 0;
//read(); 读取一个字符;如果达到文件的尾部,则返回 -1
while ((data = fr.read()) != -1) {
System.out.print((char) data);
}
*/
//2.2 一次读取多个字符
//创建缓冲区
char[] buf = new char[1024]; //创建一个字符缓冲区,大小为 1024个字符
int count = 0;
//read(char[] cbuf); 从流中读取多个字符,将读到内容存入字符数组 cbuf(缓冲区)中,返回实际读到的字符数;如果达到文件的尾部,则返回 -1
while ((count = fr.read(buf)) != -1) {
System.out.println(new String(buf, 0, count));
}
//3. 关闭
fr.close();
}
}
运行结果:
FileWriter
- 常用方法:
public void write(int c) //写入一个字符
public void write(String str) //一次写入多个字符,将字符串str中的所有字符写入此文件输出流
public void write(String str, int off, int len) //将指定字符串中的len个字符从偏移量开始写入此文件输出流
//参数:str - 一个字符串; off - 数据中的起始偏移量; len - 要写入的字符数量;
- 练习:
FileWriter
的使用: - 写入十次字符串:
"java是世界上最好的编程语言"
到文本文件write.txt
中:
package com.clown.io;
import java.io.FileWriter;
/*
FileWriter的使用:
文件字符输出流
*/
public class FileWriterDemo01 {
public static void main(String[] args) throws Exception {
//1. 创建文件字符输出流(FileWriter),并指定文件路径
FileWriter fw = new FileWriter("d:\\JavaTest\\write.txt");
//2. 写入文件
for (int i = 0; i < 10; i++) { //写入十次 "java是世界上最好的编程语言"
//write(String str); //一次写入多个字符,将字符串str中的所有字符写入此文件输出流
fw.write("java是世界上最好的编程语言\r\n");
//flush(); 刷新到硬盘
fw.flush();
}
//3. 关闭
fw.close();
System.out.println("执行完毕");
}
}
运行结果:
查看文件:
使用文件字符流实现文本文件的复制
- 使用文件字符流(
FileReader
&FileWriter
)复制在上一个案例中写入的文本文件write.txt
,复制的文件命名为write2.txt
package com.clown.io;
import java.io.FileReader;
import java.io.FileWriter;
//使用文件字符流(FileReader & FileWriter)实现文本文件的复制:
//注意:文件字符流只能复制文本文件,不能复制图片或二进制文件!而文件字节流可以复制任意类型的文件!
public class CopyFileDemo02 {
public static void main(String[] args) throws Exception {
//1. 创建流
//创建文件字符输入流(FileReader),并指定文件路径
FileReader fr = new FileReader("d:\\JavaTest\\write.txt");
//创建文件字符输出流(FileWriter),并指定文件路径
FileWriter fw = new FileWriter("d:\\JavaTest\\write2.txt");
//2. 读取 & 写入
//读取文件
int data =0;
while ((data = fr.read()) != -1) {
//写入文件
fw.write(data);
//刷新
fw.flush();
}
//3. 关闭
fr.close();
fw.close();
System.out.println("复制完毕");
}
}
运行结果:
查看文件:
查看文件内容: