Java知识点总结(JavaIO-字符流)
@(Java知识点总结)[Java, JavaIO]
[toc]
在程序中一个字符等于两个字节,那么 Java 提供了 Reader 和 Writer 两个专门操作字符流的类。
字符输出流:Writer
类定义如下:
public abstract class Writer extends Object implements Appendable,Closeable,Flushable
Appendable 接口表示内容可以被追加,接收的参数是CharSequence,实际上 String 类就实现了此接口,所以可以直接通过此接口的方法向输出流中追加内容。
字符输入流:Reader
public abstract class Reader extends Object implements Readable,Closeable
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class Demo04 {
// 输出文件内容
public static void test1() throws IOException {
File file = new File("E:" + File.separator + "test.txt");
Writer fw = new FileWriter(file);
String str = "Hello world!";
fw.write(str);
fw.close();
}
// 追加文件内容
public static void test2() throws IOException {
File file = new File("E:" + File.separator + "test.txt");
Writer fw = new FileWriter(file, true);
String str = "\r\nHello world!";
fw.write(str);
fw.close();
}
// 从文件中读取内容
public static void test3() throws IOException {
File file = new File("E:" + File.separator + "test.txt");
Reader fr = new FileReader(file);
char[] c = new char[(int) file.length()];
int len = fr.read(c); // 返回值是读取的字符数
fr.close();
System.out.println("内容是:" + new String(c, 0, len));
}
// 使用循环方式读取内容
public static void test4() throws IOException {
File file = new File("E:" + File.separator + "test.txt");
Reader fr = new FileReader(file);
char[] c = new char[(int) file.length()];
int temp = 0;
int len = 0;
while((temp = fr.read()) != -1){
c[len] = (char)temp ;
len ++;
}
fr.close();
System.out.println("内容是:" + new String(c,0,len));
}
// 强制性清空缓冲区
public static void test5() throws IOException {
File file = new File("E:" + File.separator + "test.txt");
Writer fw = new FileWriter(fil e);
String str = "Hello world!";
fw.write(str);
fw.flush();
//fw.close();
}
public static void main(String[] args) {
try {
/*test1();
test2();
test4();*/
test5();
} catch (IOException e) {
e.printStackTrace();
}
}
}
字节流和字符流的区别
字符流在操作时使用了缓冲区(内存),通过缓冲区再操作文件。
使用字节流写入文件,如果没有关闭字节流操作,文件依然存在内容,说明字节流是操作文件本身的。
使用字符流写入文件,如果没有关闭字符流操作,文件中没有任何内容,这是因为字符流使用了缓冲区,关闭字符流时会强制性的将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区的内容无法输出,所以文件中没有内容。
缓冲区:如果一个程序频繁地操作一个资源(如文件或数据库),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从此区域中读取数据即可,因为读取内存速度会比较快。
在字符流操作中,所有的字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存之中,所以使用了缓冲区暂存数据。
字节流比字符流更好,使用更广泛 。
所有的文件在硬盘或传输时都是以字节的方式进行的,包括图片等都是按字节的方式存储的,而字符是自由在内存中才会形成,所以在开发中,字节流使用较为广泛。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。