Java日志第38天 2020.8.12
字符输入流
java.io.Reader
是字符输入流的最顶层父类,定义了一些共性的成员方法,是一个抽象类
共性的成员方法:
- int read():读取单个字符并返回
- int read(char[] cbuf):一次读取多个字符,将字符读入数组
- void close():关闭该流并释放与之关联的所有资源
FileReader
文件字符输入流
java.io.FileReader extends InputStreamReader extends Reader
作用:把硬盘文件中的数据以字符的方式读取到内存中
构造方法
FileReader(String name)
FileReader(File file)
import java.io.FileReader; import java.io.IOException; public class Demo01Reader { public static void main(String[] args) throws IOException { FileReader fr1 = new FileReader("E:\\Java\\Practice\\src\\Practice\\demo15\\a.txt"); int len; while((len = fr1.read()) != -1) { System.out.print((char) len); } System.out.println(); fr1.close(); System.out.println("================="); FileReader fr2 = new FileReader("E:\\Java\\Practice\\src\\Practice\\demo15\\a.txt"); char[] cs = new char[1024]; while((len = fr2.read(cs)) != -1) { System.out.println(new String(cs, 0, len)); } fr2.close(); } }
字符输出流
是所有字符输出流的最顶层的父类,是一个抽象类
共性的成员方法:
- void write(int c):写入当个字符
- void write(char[] cbuf):写入字符数组
- abstract void wirte(char[] cbuf, int off, int len):写入字符数组的某一部分
off 数组的开始索引
len字符个数
- void write(String str):写入字符串
- void write(String str, int off, int len):写入字符串的某一部分
off 字符串的开始索引
len 字符个数
- void flush():刷新该流的缓冲
- void close():关闭此流,但先进行刷新
FileWrite
文件字符输出流
java.io.FileWrite extends OutputStreamWrite extends Writer
作用:把内存中字符数据写入到文件中
构造方法
FileWrite(File file)
FileWrite(String name)
void write(int c) 一个字符
public class Demo01Write {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("E:\\Java\\Practice\\src\\Practice\\demo15\\a.txt");
fw.write(97);
fw.flush();
fw.close();
}
}
读取数组或字符串
import java.io.FileWriter; import java.io.IOException; public class Demo01Write { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("E:\\Java\\Practice\\src\\Practice\\demo15\\a.txt"); char[] cs = {'a', 'b', 'c', 'd', 'e'}; fw.write(cs); fw.write(cs,1,3); fw.write("Hello World!"); fw.write("Hello World",6,5);//World fw.flush(); fw.close(); } }
使用try...catch...finally处理异常
import java.io.FileWriter; import java.io.IOException; public class TryCatchFinally { public static void main(String[] args) { FileWriter fw = null; try { fw=new FileWriter("W:\\Java\\Practice\\src\\Practice\\demo15\\a.txt"); for (int i = 0; i < 10; i++) { fw.write("Hello World"+(i+1)+"\r\n"); } } catch (IOException e) { e.printStackTrace(); } finally { if(fw != null){ try { fw.close(); } catch (IOException e){ e.printStackTrace(); } } } } }
注意到计算机中没有W盘,所以程序会报错,结果如下:
JDK7中的新特性
在try的后面可以添加一个(),在括号中可以定义流对象
这个流对象的作用域是在try中
try中的代码执行完毕会自动把流对象释放,不用写finally
import java.io.FileWriter; import java.io.IOException; public class TryCatchFinally { public static void main(String[] args) { try(FileWriter fr = new FileWriter("E:\\Java\\Practice\\src\\Practice\\demo15\\a.txt")){ fr.write("Hello World"); }catch(IOException e){ e.printStackTrace(); } } }
明日任务:继续学习有关流的内容