字符输入流(FileRead)
是一个阅读字符文件的便利类,是专门处理字符文件的,比如txt文件。
音频视频图片,不能使用这个流。
是从字节流到字符流的桥:它读取字节,并使用指定的
charset
将其解码为字符 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集牵涉到解码,底层是字节流,但是会解码为字符。如果解码失败就意味着咱们读取失败了
一般不会使用字符流操作图片 音频 视频等,因为牵涉到解码。会出问题!!!
开发一般使用字节流!!!
read(char[] chars),把从文件读取内容放到数组中
package com.wyx.c_fileread;
import java.io.*;
public class Demo1 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(new File("e:/aaa/1.txt")));
//声明字符缓冲数组
char[] chars = new char[4];//缓冲区
//将文件内容读取到字符数组中,也就是缓冲区
int length;
while ((length = br.read(chars)) != -1) {
System.out.println(new String(chars, 0, length));
}
//关闭流
br.getClass();
}
}
read()一次读一个字符,返回的是字符对应的assic码值
这个方法几乎不用
package com.wyx.c_fileread;
import java.io.*;
public class Demo2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(new File("e:/aaa/1.txt")));
//read():读取文件内容,一次读取一个字符,返回的是字符对应的assic码值
int length;
while ((length = br.read()) != -1) {
System.out.println(length);
}
//关闭流
br.getClass();
}
}
read(chars, 0, 2)读取一部分到数组中
这个方法不用
package com.wyx.c_fileread;
import java.io.*;
public class Demo3 {
public static void main(String[] args) throws IOException {
//文件内容:我不知道哎
BufferedReader br = new BufferedReader(new FileReader(new File("e:/aaa/1.txt")));
//声明字符缓冲数组
char[] chars = new char[4];//缓冲区
//将文件内容读取一部分到字符数组中,也就是缓冲区
int length;
while ((length = br.read(chars, 0, 2)) != -1) {
System.out.println(new String(chars, 0, length));
}
//我不
//知道
//哎
//关闭流
br.getClass();
}
}
readLend()一次读取一行,如果到达文档的末尾,返回null
有可能会用
package com.wyx.c_fileread;
import java.io.*;
public class Demo4 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(new File("e:/aaa/1.txt")));
//一次只读取一行
//读取第一行
// String s = br.readLine();
// System.out.println(s);
//读取第二行
// String s1 = br.readLine();
// System.out.println(s1);
//循环写法
String str;
while ((str = br.readLine()) != null) {
System.out.println(str);
}
//关闭流
br.getClass();
}
}
字符输出流FileWrite
package com.wyx.d_filewrite;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Demo1 {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("e:/aaa/2.txt")));
String str = "今天星期一";
char[] chars = str.toCharArray();
bw.write(chars, 0, 3);//今天星
// bw.write(chars);今天星期一
// bw.write(str);今天星期一
// bw.write(97);a
// bw.write(str, 0, 2);今天
bw.close();
}
}
换行符newLine
只起到换行作用
package com.wyx.d_filewrite;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("e:/aaa/2.txt")));
bw.write("小红");
bw.newLine();//换行符
bw.write("小明");
bw.write("小张");
bw.close();
//小红
//小明小张
}
}
综合案例
复制一个文本,用字符流
package com.wyx.d_filewrite;
import java.io.*;
public class Demo3 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(new File("e:/aaa/3.txt")));
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("d:/aaa/3.txt")));
char[] cbuf = new char[1024 * 4];
int length = -1;
while ((length = br.read(cbuf)) != -1) {
bw.write(cbuf, 0 ,length);
}
br.close();
bw.close();
}
}
总结:
字节流:
可以处理 文本 图片 音频 视频
字符流:
只能处理文本