Java中流的学习总结(1)

来源:互联网 发布:武汉纵横网络 编辑:程序博客网 时间:2024/05/29 16:59

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来实现费文本文件的复制。

34@Test5public void TestCopyFile(String src, String desc) {67、          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 block30、             e.printStackTrace();31、         } finally {32// 5、关闭数据流(只要关闭缓冲流,其节点流就会跟随一起关闭)33if (bos != null) {34try {35、                     bos.close();36、                 } catch (IOException e) {37// TODO Auto-generated catch block38、                     e.printStackTrace();39、                 }40、             }41if (bis != null) {42try {43、                     bis.close();44、                 } catch (IOException e) {45// TODO Auto-generated catch block46、                     e.printStackTrace();47、                 }48、             }49、         }50、     }
*1. 使用BufferedReader 和 BufferedWriter 来实现文本文件的复制。*      
51public class TestBufferedReaderWriter {52// 使用BufferedReader 和 BufferedWriter 来实现文本文件的复制53、     @Test54public void TestBuffered() {55、         BufferedReaderWriter("D://1.txt", "D://2.txt");56、     }5758public 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);6465、             FileReader fr = new FileReader(file1);66、             FileWriter fw = new FileWriter(file2);6768、             br = new BufferedReader(fr);69、             bw = new BufferedWriter(fw);7071// 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();8283、                 bw.flush();84、             }85、         } catch (IOException e) {86// TODO Auto-generated catch block87、             e.printStackTrace();88、         } finally {89if (bw != null) {90try {91、                     bw.close();92、                 } catch (IOException e) {93// TODO Auto-generated catch block94、                     e.printStackTrace();95、                 }96、             }97if (br != null) {98try {99、                     br.close();100、                    } catch (IOException e) {101// TODO Auto-generated catch block102、                        e.printStackTrace();103、                    }104、                }105、            }106107、        }108、    }
原创粉丝点击