在上一篇博客中总结了字节输入流和字节输出流的用法以及例子,遇到并解决的问题:
1.回顾了一下StringBuffer
2.回顾了String中的toString方法,返回的是String对象的本身
3.关于字节流读取和写入中文的原理是通过getbytes方法可以把字符进行编码成为字节。
String str = "今天天气很好!";
byte[] buff = str.getBytes();
//把字符串转换为 字节数组
字符输入流
字符输入流也是以二进制的的形式在内存中进行存储的,但是字符流具有自动将二进制数据进行编码或者解码成为一个字符
字符流 = 字节流 +编码/解码
———Reader
———FileReader
关于使用方法和字节流的使用方法大同小异,区别就在接口和实现类不同
使用步骤:
1.找到目标文件
2.建立数据传输通道
3.读取数据
4.关闭资源
package 博客代码;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class CharIO {
/**
*
* @param args
* 字符输入流
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//1.找到目标文件
File file = new File("E:\\Java\\IO测试文件夹\\user.txt");
//建立通道
FileReader fileReader = new FileReader(file);
//读取字符数据
char[] c = new char[1024];
int len;
while ((len = fileReader.read(c)) != -1) {
String string = new String(c);
System.out.println(string);
}
fileReader.close();
}
}
输出结果:hello world!123
这就是一个字符输入流的基础用法,至于字符输出流和缓冲字符输入流和输出流,也和字节流差不多,这里就不在重复写了,至于抛出的异常,是一个找不到文件的异常,用他的父类IOException来代替。
流中的异常处理
在java中异常处理有两种方式,抛出异常和解决异常。
在这里的抛出异常是:throws 异常
解决异常:try{
//可能产生异常的代码
}catch(Exception e){
//处理异常的主体
}finally{
//需要必须执行的语句
}
杂项总结
对于字符流中的异常,凡是关闭输出流和关闭输入流都有可能出现异常,所以都要用进行trycatch来进行处理
总结:1.throw new RuntimeException:对处理异常进行包装,包装成为运行时异常,处理方式更简单,不用每次都去抛出异常
2.在流中,关闭流的顺序是先关闭后进的,再关闭先进的
3.关于在缓冲字符中的newLine()和readLined()
newLine() 换行的意思,执行的是(\r\n)
readLine() 读取一整个行数,执行的是读取一行
package 博客代码;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class CharIO {
/**
*
* @param args
* 字符输入流
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//1.找到目标文件
File file = new File("");
//2.建立数据传输的通道
FileWriter writer = new FileWriter(file);
//3.创建缓冲输出字符流对象
BufferedWriter buffer = new BufferedWriter(writer);
//4.写入数据
buffer.newLine(); //这就是在文件中 输出一个 \r\n, 不是单单的一个\n
//让文件换行
buffer.write("\r\n哈哈哈哈");
//立刻写入到磁盘
buffer.flush();
//5.关闭资源
buffer.close();
}
}
总结:对于字符流输入输出掌握的还不错,对杂项和不足的地方进行了一个总结,遗留下来的问题基本得到解决。