1.概览
分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
---|---|---|---|---|
抽象基类 | InputStream | OutputStream | Reader | Writer |
访问文件 | FileInputStream | FileOutputStream | FileReader | FileWriter |
访问数组 | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
访问管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
转换流 | InputStreamReader | OutputStreamWriter | ||
对象流 | ObjectInputStream | ObjectOutputStream | ||
抽象基类 | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter |
打印流 | PrintStream | PrintWriter | ||
特殊流 | DataInputStream | DataOutputStream |
2.使用
2.1.概述
IDEA中,在@Test标注的单元测试方法下,File中相对路径的基础路径为模块名,而在main方法中,File中相对路径的基础路径为工程名
2.2.FileReader
FileReader fileReader = null;
try {
fileReader = new FileReader(new File("hello.txt"));
// 无参的read方法一次只能读一个字符(返回值为int类型,可以强转为char类型)
char[] arr = new char[10];
// 传入字符数组,则会将内容读入到字符数组中,能装满就装满,返回值为装入多少个字符
int count;
while ((count = fileReader.read(arr)) != -1) {
// 注意要调用String的此种构造参数,否则如果读不满,会将剩下的脏数据输出(每次填入char数组时不会清空,只会覆盖对应位置的数据)
System.out.print(new String(arr, 0, count));
}
fileReader.read();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}