黑马软件工程师-IO流的简单应用
------- android培训、java培训、期待与您交流!
----------
IO流概述:
(1)IO流的作用:上传文件和下载文件。(2)IO流的分类:
A:流向
输入流 读取数据
输出流 写出数据
B:数据类型
字节流:字节输入流、字节输出流
字符流:字符输入流、字符输出流
一般来说,如果没有说明按照哪种类型分,指的是按照数据类型分。
(3)什么时候使用字符流,什么时候使用字节流。
如果一个要操作的文件,通过记事本打开并能够读懂其内容,就可以考虑使用字符流。
否则,就使用字节流。
什么都不知道,就用字节流。
(4)IO的基类及具体类
A:字节流
字节输入流:InputStream、FileInputStream
字节输出流:OutputStream、FileOutputStream
B:字符流
字符输入流:Reader、FileReader
字符输出流:Writer、FileWriter
(5)FileWriter写数据的步骤及代码体现:
步骤:
A:创建字符输出流对象。
B:调用write方法。
C:释放资源。
<pre name="code" class="java">public class IODemo { public static void main(String[] args) throws IOException { // 创建字符输出流对象 FileWriter fw = new FileWriter("fw.txt"); // public void write(String str) fw.write("hello,io,I am coming"); fw.flush();<pre name="code" class="java"> fw.close(); } }
几个要注意的小问题:A:创建字符输出流对象做了哪些事情? 调用系统功能,创建一个文件fw2.txt。 创建字符输出流对象。 把对象指向文件B:为什么要刷新缓冲区? 因为数据底层是字节流数据,如果要使用字符流数据,就得刷新缓冲区才能写入文件。C:为什么要释放流资源? 关闭流对象,将流对象变为垃圾。 通知操作系统去释放,并开始创建那个文件相关的资源。D:刷新和释放有什么区别? flush() 刷新缓冲区,流对象还可以继续使用。 close() 释放资源,但是会先刷新一次缓冲区,保证数据不丢失,操作完毕后,流对象不可以再被使用。 E:如何实现数据的换行? 不同的操作系统对换行符的识别不太一致: windows:\r\nlinux:\n mac:\rF:如何实现数据的追加写入? 使用带两个参数的构造方法。 第二个参数指示是否是追加写入。 public FileWriter(String fileName,boolean append)(6)FileReader读数据的步骤及代码体现:步骤:A:创建字符输入流对象。B:调用read方法,并把数据显示在控制台。C:释放资源。
FileReader fr = new FileReader("fr.txt"); //方式1:一次读取一个字符 int ch = 0; while((ch=fr.read())!=-1) { System.out.print((char)ch); } //方式2:一次读取一个字符数组 char[] chs = new char[1024]; int len = 0; while((len=fr.read(chs))!=-1) { System.out.print(String.valueOf(chs,0,len)); } fr.close();(7)复制文本文件:
两种方式操作。代码自己补齐。
数据源:c:\\a.txt
目的地:d:\\b.txt
(8)加入异常后的代码(看懂即可)
A:FileWriter写数据
B:字符流复制文本文件
(9)使用FileReader和FileWriter来拷贝文件
public class CopyFileDemo { public static void main(String[] args) throws IOException { // 封装数据源 FileReader fr = new FileReader("IODemo.java"); // 封装目的地 FileWriter fw = new FileWriter("d:\\Copy.java"); // 读取数据并写出数据 int ch = 0; while ((ch = fr.read()) != -1) { fw.write(ch); } // 释放资源 fw.close(); fr.close(); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。