Java中流的学习总结(1)

时间:2021-02-11 04:01:55

1、 File类的作用:
a) 在File中只是涉及到文件和文件夹的最基本的操作,比如如何创建、删除、重命名等。
b) 在创建File对象是涉及到了文件存储路径的问题:
i. 绝对路径:包括盘符在内的完整的文件路径。
ii. 相对路径:在当前文件目录下的文件的路径。
c) File类中的常见的方法中的注意事项:
i. File1.renameTo(file2):File1重命名为File2,要求就是File1一定要存在,而File2一定不存在。File1和File2可以是文件也可以是文件夹。
ii. mkdir()和mkdirs()的区别:
1. mkdir():创建一个文件目录,如果上层的文件目录存在,就可以创建。
2. nkdirs(): 创建一个文件怒路,如果上层的文件目录不存在,就可以一并创建。
2、 IO流的说明:
a) Input和Output的区别:
i. Input:从外部数据到程序中。
ii. Output: 从程序输出到外部。
b) IO流的分类:
i. 按照传送的数据单位来分:分为字节流(8bit)、字符流(16bit)
1. 字节流主要就是用于处理非文本文件。
a) 字节流
2. 字符流主要就是用于处理文件文件。
ii. 按照流的流向可以分为:输入流和输出流。
iii. 按照流的角色不同可以分为:节点流和处理流。
1. 节点流:程序直接将流对到文件上的流称为节点流。
a) 常用的节点流有:FileInputStream \ FileOutputStream \ FileReader \ FileWriter
2. 处理流:在节点流外部再包多一层流,添加额外的功能。
a) 常见的处理流就是:BufferedInputStream \BufferedOutputStream \BufferedReader\ BufferedWriter
iv. 体系说明:
抽象基类 InputStream OutputStream Reader Writer
节点流 FileInputStream FileOutputStream FileReader FileWriter
处理流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
c) IO流的使用:
i. 文件的读取到控制台和复制:推荐使用使用缓冲流进行处理,原因是:
1. 节点流是柱塞式的,而缓冲流不是柱塞式的。所以缓冲流的速度会比节点流的速度要快。
ii. 用例:
1. 使用BufferedInputStream 和BufferedOutputStream来实现费文本文件的复制。

3
4@Test
5public void TestCopyFile(String src, String desc) {
6
7、 BufferedInputStream bis = null;
8、 BufferedOutputStream bos = null;
9try {
10// 1、创建File文件
11、 File file_src = new File(src);
12、 File file_desc = new File(desc);
13// 2、创建节点流
14、 FileInputStream fis = new FileInputStream(file_src);
15、 FileOutputStream fos = new FileOutputStream(file_desc);
16// 3、创建缓冲流
17、 bis = new BufferedInputStream(fis);
18、 bos = new BufferedOutputStream(fos);
19// 4、开始处理数据
20byte[] bytes = new byte[20];
21// 返回的字节长度
22int len;
23while ((len = bis.read(bytes)) != -1) {
24、 bos.write(bytes, 0, len);
25// 数据刷新
26、 bos.flush();
27、 }
28、 } catch (IOException e) {
29// TODO Auto-generated catch block
30、 e.printStackTrace();
31、 } finally {
32// 5、关闭数据流(只要关闭缓冲流,其节点流就会跟随一起关闭)
33if (bos != null) {
34try {
35、 bos.close();
36、 } catch (IOException e) {
37// TODO Auto-generated catch block
38、 e.printStackTrace();
39、 }
40、 }
41if (bis != null) {
42try {
43、 bis.close();
44、 } catch (IOException e) {
45// TODO Auto-generated catch block
46、 e.printStackTrace();
47、 }
48、 }
49、 }
50、 }
*1. 使用BufferedReader 和 BufferedWriter 来实现文本文件的复制。*      
51public class TestBufferedReaderWriter {
52// 使用BufferedReader 和 BufferedWriter 来实现文本文件的复制
53、 @Test
54public void TestBuffered() {
55、 BufferedReaderWriter("D://1.txt", "D://2.txt");
56、 }
57
58public void BufferedReaderWriter(String src, String desc) {
59、 BufferedReader br = null;
60、 BufferedWriter bw = null;
61try {
62、 File file1 = new File(src);
63、 File file2 = new File(desc);
64
65、 FileReader fr = new FileReader(file1);
66、 FileWriter fw = new FileWriter(file2);
67
68、 br = new BufferedReader(fr);
69、 bw = new BufferedWriter(fw);
70
71// char[] chars = new char[20];
72// int len;
73// while ((len = br.read(chars)) != -1) {
74// bw.write(new String(chars, 0, len));
75// bw.flush();
76// }
77、 String str = null;
78while ((str = br.readLine()) != null) {
79、 bw.write(str.toCharArray());
80// 换行
81、 bw.newLine();
82
83、 bw.flush();
84、 }
85、 } catch (IOException e) {
86// TODO Auto-generated catch block
87、 e.printStackTrace();
88、 } finally {
89if (bw != null) {
90try {
91、 bw.close();
92、 } catch (IOException e) {
93// TODO Auto-generated catch block
94、 e.printStackTrace();
95、 }
96、 }
97if (br != null) {
98try {
99、 br.close();
100、 } catch (IOException e) {
101// TODO Auto-generated catch block
102、 e.printStackTrace();
103、 }
104、 }
105、 }
106
107、 }
108、 }