01.第一章:IO概述_IO流概述及分类:
1).字节流:以“字节”的方式操作数据的。可以读、写任何文件。
A).输出流:OutputStream(抽象类)(三种输出的方法)
1).write(int b):输出一个字节
2).write(byte[] arr):输出一个字节数组。
3).write(byte[] arr,int off,int len):输出字节数组的一部分。
|–FileOutputStream(子类)【昨天讲的】 B).输入流:InputStream(抽象类)
|–FileInputStream(子类)
2).字符流:以“字符”的方式操作数组。只能读、写纯文本文件。
A).输出流:Writer(抽象类)
|–OutputStreamWriter(转换流)(下次课讲)
|–FileWriter(子类–今天讲) B).输入流:Reader(抽象类)|–InputStreamReader(转换流) (下次课讲)
|–FileReader(子类–今天讲)
02.第一章:字节流_输入流_InputStream的读取方法:
1).读取的方法:
1).int read():读取一个字节;
2).int read(byte[] byteArary):读取一个byte[]数组。
2).子类FileInputStream的使用:
1).构造方法: 1).FileInputStream(String filename):
2).FileInputStream(File filename):
注意:
1).构造时,文件必须存在,否则抛异常;
2).构造时,只能构造在文件上,不能构造在目录上。
3).示例代码:
public class Demo {
public static void main(String[] args) throws Exception {
//1.构造一个输入流
InputStream in = new FileInputStream("demo01.txt");
//2.读取--一次读取一个字节
/*int b = 0;
while((b = in.read()) != -1) {
System.out.println("转转为字符:" + (char)b);
}*/
//读取--一次读取多个字节
byte[] arr = new byte[3];
int len = 0;
while((len = in.read(arr)) != -1) {
//使用byte[]数组构造一个字符串
String str = new String(arr,0,len);
System.out.println("转换为字符串:" + str);
}
//3.关闭流
in.close();
}
}
4).练习_文件复制:
public class Demo {
public static void main(String[] args) throws Exception {
//1.构造一个到源文件的输入流 InputStream in = new FileInputStream(“D:\20190321(92期)-就业班(下午)\就业班-day09-File类、递归\课堂视频\02.第一章:File类_File类的构造方法.itcast”);
//2.构造一个到目标文件的输出流
OutputStream out = new FileOutputStream(“D:\20190321(92期)-就业班(下午)\就业班-day09-File类、递归\课堂视频\copy.itcast”);
//3.一次读、写一个字节–慢
/* int b = 0;
while ((b = in.read()) != -1) {
out.write(b);
}*///4.一次读、写一个字节数组–快
byte[] byteArray = new byte[1024 ];
int len = 0;
while ((len = in.read(byteArray)) != -1) {
out.write(byteArray,0,len);
}
out.close();
in.close();
System.out.println("复制完毕!");
}
}
03.第三章:字符流_概述
1)."字符流"是读写“纯文本文件”。使用“字节流”只能一次读写一个字节,但对于其它国家的文字,很多都是两个、多个字节表示一个字符,这样使用“字节流”操作就很不方便,所以Java又提供了“字符流”。
2)."字符流"也是基于“字节流”的。
04.第三章:字符流_输出流_Writer的输出方法
1).五种输出的方法:
1).write(int c):输出一个字符。
2).write(char[] arr):输出一个字符数组;
3).write(char[] arr,int off,int len):输出字符数组的一部分;
4).write(String s):输出一个字符串。
5).write(String s,int off,int len):输出字符串的一部分。
2).子类FileWriter的构造方法:
1).FileWriter(String fileName) 构造一个给定文件名的FileWriter对象。
2).FileWriter(String fileName, boolean append) 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。
3).FileWriter(File file) 给一个File对象构造一个FileWriter对象。
4).FileWriter(File file, boolean
append) 给一个File对象构造一个FileWriter对象。
3).示例代码:
public class Demo {
public static void main(String[] args) throws IOException {
//1.构造一个输出流
FileWriter out = new FileWriter("demo03.txt");
//2.输出
//1).输出一个字符
out.write(98);
//2).输出一个字符数组
char[] chArray = {'a', 'b', 'c', '你', '好'};
out.write(chArray);
//3).输出字符数组的一部分
//只输出:你好
out.write(chArray,3,2);
//4).输出一个字符串【重点掌握】
out.write(“呵呵,我爱Java!”);
//5).输出字符串的一部分
String str = “我爱Java”;
//只输出:Java
out.write(str,2,4);
//3.清理缓存 // out.flush();//刷新缓存
//4.关闭文件 out.close();//相当于:flush() + close()
}
}
05.第三章:字符流_输出流_Writer的追加写入及换行
1).追加写入:构造方法
FileWriter(String(File) name,boolean append):
第二个参数为true,即为:追加写入
2).换行:
out.write("\r\n");
06.第三章:字符流_输入流_Reader的读取的方法
1).Reader的读取的方法:(两种)
1).int read():读取一个字符;
2).int read(char[] chArray):读取一个字符数组
2).子类FileReader的构造方法:
1).FileReader(String fileName):
2).FileReader(File fileName):
3).示例代码:
public class Demo {
public static void main(String[] args) throws Exception {
//1.构造一个输入流
FileReader in = new FileReader("demo04.txt");
//2.一次读取一个字符
/*int c = 0;
while((c = in.read()) != -1) {
System.out.println("转换为字符:" + (char)c);
}*/
//3.一次读取多个字符
char[] chArray = new char[3];
int len = 0;
while ((len = in.read(chArray)) != -1) {
System.out.println(new String(chArray,0,len));
}
}
}
07.第四章:IO异常的处理_JDK7前的处理方式
public static void main(String[] args) {
FileWriter out = null;
try {
out = new FileWriter("demo05.txt");
out.write("哈啰");
} catch (IOException e) {
e.printStackTrace();
}finally {
if(out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
08.第四章:IO异常的处理_JDK7后的处理方式
public class Demo {
public static void main(String[] args) {
try(FileWriter out = new FileWriter("demo06.txt")){
out.write("呵呵");
} catch (IOException e) {
e.printStackTrace();
}
//当try...catch...执行完毕后,out会自动关闭。不需要我们自己关闭了
}
}
小结字节流和字符流:
1).字节流:只要是复制文件,使用字节流
A).输出流:OutputStream(抽象类)(三种输出的方法)
1).write(int b):输出一个字节
2).write(byte[] arr):输出字节数组
3).write(byte[] arr,int off,int len):输出字节数组的一部分。
|–FileOutputStream(子类) B).输入流:InputStream(抽象类)(两种读取的方法)
1).int read():读取一个字节;
2).int read(byte[] byteArray):读取一个字节数组。
|–FileInputStream(子类)
2).字符流:操作纯文本文件,使用字符流。
A).输出流:Writer(抽象类)(五种输出的方法)
1).write(int c):输出一个字符
2).write(char[] charr):输出字符数组
3).write(char[] arr,int off,int len):输出字符数组的一部分
4).write(String s):输出一个字符串。
5).write(String s,int off,int len):输出字符串的一部分
|–OutputStreamWriter(转换流–下次课讲)
|–FileWriter(子类)
B).输入流:Reader(抽象类)(两种读取的方法)
1).int read():读取一个字符;
2).int read(char[] chArray):读取一个字符数组。 |–InputStreamReader(转换流–下次课讲)
|–FileReader(子类)
09.第五章:属性集_Properties类概述
1).java.util.Properties(类):它是一个“Map”集合类,但他内部包含了一些和IO流结合使用的方法,可以很方便的操作“配置文件”。
2).什么是“配置文件”:指程序在运行时存储的一些用户数据的文件。它就是纯文本文件。在世界范围内, 有一个对于配置文件的通用的规范,配置文件的内部格式:
配置文件.txt
--------------------------------------
名1 = 值
名2 = 值
…
名n = 值
由于这种结构非常匹配Map的结构,所有Java中提供了Map的类来结合IO流,操作这种配置文件。
10.第五章:属性集_Properties类与流相关的方法介绍
1).store(Writer out,String comm):将集合中的数据写入到配置文件;
2).load(Reader in):将文件中的数据读取到集合中。