黑马程序员——IO流1
2013-07-03 21:39
316 查看
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
IO流主要用来处理设备之间的数据传输,JAVA语言定义了许多类专门负责各种方式的输入输出,这些类都被放在java.io包中。
流按操作数据分为字节流和字符流,按流向分为输入流和输出流。
一、字符流:其实就是,字节流读取文字字节数据后,不直接操作而是先查指定的编码表。获取对应的文字。在对这个文字进行操作。简单说:字节流+编码表
字符流顶层父类:Reader,Writer
1,FileReader与FileWriter
FileWriter向文件写入数据步骤:创建带文件构造函数的FileWriter对象;调用write方法写入数据;刷新并关闭流
flush()与close()区别:flush()只是刷新缓冲区,以后还可以操作流对象;close()刷新缓冲区后关闭流,以后无法操作流对象,对一个流对象操作完毕后一定要关闭流,以释放内存资源。
获取系统换行符:System.getProperty("line.separator")
IOException处理方式:只要FileWriter创建成功,中间操作出异常,流必须要关闭,如果FileWriter创建失败,不需要关闭流,如果此时运行关流操作又会出现异常,因此要把关流操作放在finally里面单独try。示例如下:
FileReader读取文件步骤:创建读取字符数据的流对象,在创建读取流对象时,必须要明确被读取的文件,一定要确定该文件是存在的;用Reader中的read方法读取字符。
2,BufferedReader与BufferedWriter字符流缓冲区,提高字符流读写效率。
LineNumberReader是BufferedReader的子类,跟踪行号的缓冲字符输入流。此类定义了方法
一、字符流:InputStream,OutputStream
1,FileInputStream ,FileOutputStream用于创建一个能操作文件字节的输入或输出流。
2,BufferedInputStream,BufferedOutputStream分别是InputStream、OutputStream的缓冲区,完成字节输入输出流的高效操作。
一个带缓冲区的复制Mp3的示例
问:能不能用字符流操作媒体文件。
不能,字符流是字节流加上编码表,当字符流读取媒体文件字节后,回去查编码表,媒体文件是没有码表的,这样就会出现输入输出的字节不一样,导致操作失败。
3,InputStreamReader与OutputStreamWriter:转换流
InputStreamReader :字节到字符的桥梁,读取字节并将其解码为字符。
OutputStreamWriter:字符到字节的桥梁,将要写入流中的字符编码成字节。
4,System.out与System.in
System.in:“标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。 返回类型为InputStream
System.out:“标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。返回类型为PrintStream
总结发现读取键盘录入可以简化为:new BufferedReader(new InputStreamReam(System.in));
打印到控制台的流操作简化为:new BufferedWriter(new OutputStreamWriter(System.out));
小结:IO流操作文本文文件规律
1)文本文件 -- 文本文件
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
2)文本文件 -- 控制台输出
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
3)键盘录入 -- 文本文件
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
4)键盘录入 -- 控制台输出
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
流的操作规律:
1,明确源和目的(汇)
源:InputStream Reader
目的:OutputStream Writer
2,明确数据是否是纯文本数据。
源:是 纯文本:Reader
否:InputStream
目的:是 纯文本 Writer
否:OutputStream
到这里,就可以明确需求中具体要使用哪个体系。
3,明确具体的设备。
源设备:
硬盘:File
键盘:System.in
内存:数组
网络:Socket流
目的设备:
硬盘:File
控制台:System.out
内存:数组
网络:Socket流
4,是否需要其他额外功能。
1),是否需要高效(缓冲区); 是,就加上buffer.
2),转换。
总结:操作流的对象太多,具体应用时应注意以下几点:数据源和数据目的地,数据的内容是否是纯文本,具体设备,是否需要提高效率。只有这样才能在运用起来得心应手,事半功倍。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
IO流主要用来处理设备之间的数据传输,JAVA语言定义了许多类专门负责各种方式的输入输出,这些类都被放在java.io包中。
流按操作数据分为字节流和字符流,按流向分为输入流和输出流。
一、字符流:其实就是,字节流读取文字字节数据后,不直接操作而是先查指定的编码表。获取对应的文字。在对这个文字进行操作。简单说:字节流+编码表
字符流顶层父类:Reader,Writer
1,FileReader与FileWriter
FileWriter向文件写入数据步骤:创建带文件构造函数的FileWriter对象;调用write方法写入数据;刷新并关闭流
flush()与close()区别:flush()只是刷新缓冲区,以后还可以操作流对象;close()刷新缓冲区后关闭流,以后无法操作流对象,对一个流对象操作完毕后一定要关闭流,以释放内存资源。
获取系统换行符:System.getProperty("line.separator")
IOException处理方式:只要FileWriter创建成功,中间操作出异常,流必须要关闭,如果FileWriter创建失败,不需要关闭流,如果此时运行关流操作又会出现异常,因此要把关流操作放在finally里面单独try。示例如下:
package itcast; import java.io.FileWriter; import java.io.IOException; public class IOExceptionDemo { //获取与系统无关的换行符常量 private static final String LINE_SEPARATOR = System.getProperty("line.separator"); public static void main(String[] args) { //声明FileWriter类型变量引用 FileWriter fw = null; try { //初始化fw fw = new FileWriter("k:\\demo.txt"); //通过write方法添加数据 fw.write("abcde" + LINE_SEPARATOR + "hahaha"); } catch (IOException e) { System.out.println(e.toString()); } finally { //避免出现空指针异常 if (fw != null) try { fw.close(); } catch (IOException e) { // code.... throw new RuntimeException("关闭失败"); } } } }
FileReader读取文件步骤:创建读取字符数据的流对象,在创建读取流对象时,必须要明确被读取的文件,一定要确定该文件是存在的;用Reader中的read方法读取字符。
2,BufferedReader与BufferedWriter字符流缓冲区,提高字符流读写效率。
LineNumberReader是BufferedReader的子类,跟踪行号的缓冲字符输入流。此类定义了方法
setLineNumber(int)和
getLineNumber(),它们可分别用于设置和获取当前行号。
package itcast; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopyText { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("buf.txt"); BufferedReader bufr = new BufferedReader(fr); FileWriter fw = new FileWriter("buf_copy.txt"); BufferedWriter bufw = new BufferedWriter(fw); String line = null; while((line=bufr.readLine())!=null){ bufw.write(line); bufw.newLine(); bufw.flush(); } bufw.close(); bufr.close(); } }
一、字符流:InputStream,OutputStream
1,FileInputStream ,FileOutputStream用于创建一个能操作文件字节的输入或输出流。
2,BufferedInputStream,BufferedOutputStream分别是InputStream、OutputStream的缓冲区,完成字节输入输出流的高效操作。
一个带缓冲区的复制Mp3的示例
package itcast; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyMp3{ public static void main(String[] args) throws IOException { copy(); } public static void copy() throws IOException { FileInputStream fis = new FileInputStream("c:\\0.mp3"); BufferedInputStream bufis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream("c:\\2.mp3"); BufferedOutputStream bufos = new BufferedOutputStream(fos); int ch = 0; while((ch=bufis.read())!=-1){ bufos.write(ch); } bufos.close(); bufis.close(); } }
问:能不能用字符流操作媒体文件。
不能,字符流是字节流加上编码表,当字符流读取媒体文件字节后,回去查编码表,媒体文件是没有码表的,这样就会出现输入输出的字节不一样,导致操作失败。
3,InputStreamReader与OutputStreamWriter:转换流
InputStreamReader :字节到字符的桥梁,读取字节并将其解码为字符。
OutputStreamWriter:字符到字节的桥梁,将要写入流中的字符编码成字节。
4,System.out与System.in
System.in:“标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。 返回类型为InputStream
System.out:“标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。返回类型为PrintStream
package cn.itcast.io.p1.transstream.demo; /*需求:将从键盘读取到的字符,转换成大写打印在控制台上。 *如果读取到 over 程序结束 *步骤:1,因为键盘录入只读取一个字节,要判断是否是over,需要将读取到的字节拼成字符串。 * 2,那就需要一个容器。StringBuilder. * 3,在用户回车之前将录入的数据变成字符串判断即可。 * 4,把字符串转换成大写,将字符串转换成字节用打印流打印在控制台上 */ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; public class TransStreamDemo { public static void main(String[] args) throws IOException { //字节流。 InputStream in = System.in; //将字节转成字符的桥梁。转换流。 InputStreamReader isr = new InputStreamReader(in); //字符流,缓冲区 BufferedReader bufr = new BufferedReader(isr); OutputStream out = System.out; OutputStreamWriter osw = new OutputStreamWriter(out); BufferedWriter bufw = new BufferedWriter(osw); String line = null; //循环读取键盘录入字符串 while((line=bufr.readLine())!=null){ if("over".equals(line)) break; //把得到的字符转换成大写,并打印在控制台 bufw.write(line.toUpperCase()); //补充换行标记 bufw.newLine(); bufw.flush(); } } }
总结发现读取键盘录入可以简化为:new BufferedReader(new InputStreamReam(System.in));
打印到控制台的流操作简化为:new BufferedWriter(new OutputStreamWriter(System.out));
小结:IO流操作文本文文件规律
1)文本文件 -- 文本文件
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
2)文本文件 -- 控制台输出
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
3)键盘录入 -- 文本文件
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
4)键盘录入 -- 控制台输出
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
流的操作规律:
1,明确源和目的(汇)
源:InputStream Reader
目的:OutputStream Writer
2,明确数据是否是纯文本数据。
源:是 纯文本:Reader
否:InputStream
目的:是 纯文本 Writer
否:OutputStream
到这里,就可以明确需求中具体要使用哪个体系。
3,明确具体的设备。
源设备:
硬盘:File
键盘:System.in
内存:数组
网络:Socket流
目的设备:
硬盘:File
控制台:System.out
内存:数组
网络:Socket流
4,是否需要其他额外功能。
1),是否需要高效(缓冲区); 是,就加上buffer.
2),转换。
总结:操作流的对象太多,具体应用时应注意以下几点:数据源和数据目的地,数据的内容是否是纯文本,具体设备,是否需要提高效率。只有这样才能在运用起来得心应手,事半功倍。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
相关文章推荐
- 黑马程序员_<<IO流基本操作(Writer,Reader)>>
- 黑马程序员_io流的理解
- 黑马程序员---------------IO流
- 黑马程序员——JAVA语言加强部分——IO流
- 黑马程序员_java的IO流(对第十九课字节流及转换流的总结二)
- 黑马程序员 java学习笔记——IO流3
- 黑马程序员_IO流_FileReader类和FileWriter类
- 黑马程序员——————IO流(二)_File类、其他流
- 黑马程序员----IO流(二)
- 黑马程序员-7-java-IO流知识点串讲(1)-IO流概念及字符流Writer、Reader
- 黑马程序员——Java之IO流(2)
- 黑马程序员——java-IO流概念总结
- 黑马程序员—IO流
- 黑马程序员_Java基础_IO流(File类和properties类相关操作)
- 黑马程序员学习(九) IO流的一般使用原则
- 黑马程序员_day18 其他对象和IO流)
- 黑马程序员---IO流-File类,递归
- 黑马程序员_IO流一(IO流概述,字符流,FileWriter,FileReader)
- 黑马程序员_IO流(1)
- “黑马程序员”IO流 DataInputStream与DataOutputStream的用法