黑马程序员-java中IO流的操作总结1
来源:互联网 发布:南宁云宝宝大数据 编辑:程序博客网 时间:2024/05/19 16:05
-------------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------------
IO流:读进来,写出去
IO流用来处理设备之间的数据传输java对数据的操作是通过流的方式
java对于操作流的对象都在IO包中
流按照操作数据分为:字节流和字符流
流按照流向分为:输入流和输出流
IO流常用基类:
字节流:
InputStream
FileInputStream
available方法:获得文件大小
BufferedInputStream
OutputStream
FileOutputStream
BufferedOutputStream
字符流:
Reader
FileReader 参照FileReaderDemo.java
BufferedReader:带缓冲区。参照BufferedReaderDemo.java
Writer
FileWriter 参照FileWriterDemo.java
BufferedWriter:带缓冲区。参照BufferedWriterDemo.java
流操作的基本规律:
1、明确源和目的
源:输入流 InputStream 和 Reader
目的:输出流 OutputStream 和 Writer
2、操作的数据是不是纯文本
是:字符流
不是:字节流
3、当体系明确后,再明确要使用哪个具体的对象。
通过设备来区分:
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台
例子一:
将一个文本文件中的数据存储到另一个文件中,复制文件。
源:因为是读取文本文件,所以选择Reader体系,而要读取硬盘上的文件,Reader体系中可以操作文件的对象是FileReader。
如果需要提高效率,加入缓冲区BufferedReader
目的:因为是写入文本文件,所以选择Writer体系中的FileWriter。如果需要提高效率,加入缓冲区BufferedWriter
例子二:
将键盘录入的数据保存到一个文件当中。
源:因为是键盘输入的纯文本,所以选择Reader
设备:键盘-对应的对象是system.in,而system.in是字节流,但是源已经确定了使用Reader体系,则需要
将system.in的字节流转换成字符流,使用到了Reader体系的转换流InputStreamReader,如果需要提高效率加入BufferedReader
目的:存储文本文件,使用Writer,因在硬盘中存储使用FileWriter,提高效率时加入BufferedWriter
例子三:
把录入的数据按照指定的编码表存储到文件中。
FileWriter默认使用的是GBK编码,但是存储时,要用指定的编码表存储的话,只有转换流可以指定编码表,使用的对象是OutputStreamWriter
而该转换流对象需要接受一个字节输出流,而且还可以操作文件的字节输出流FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("demo.txt"),"utf-8")
提高效率加入bufferedwriter。
装换流一般用于字符编码的转换。
FileReaderDemo.java
import java.io.FileReader;import java.io.IOException;public class FileReaderDemo {public static void main(String[] args) throws IOException{Method1(); Method2(); }public static void Method1() throws IOException{//创建一个文件读取流对象,和制定文件名称关联。//如果文件不存在发生FileNotFoundException异常FileReader fr = new FileReader("demo.txt");//调用文件读取流方法,当读到文件的末尾时返回值为-1。因为返回的是int,需要类型转换。int ch = 0;while((ch = fr.read())!= -1){System.out.println((char)ch);}fr.close();}public static void Method2() throws IOException{FileReader fr = new FileReader("demo.txt");//定义一个字符数组,用于存储读取的字符。大小一般定义为1024的整数倍。//read(char[])返回读取到的字符个数char[] buf = new char[1024];int num = 0;while((num = fr.read(buf))!=-1){System.out.println(new String(buf,0,num));}fr.close();}}
BufferedReaderDemo.java
import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.io.Reader;/* 装饰设计模式: 想要对已有的对象进行功能增强时,可以定义类,将已有对象传入(构造函数传入),基于传入对象已有的功能,提供加强功能, 那么自定义的类成为装饰类。例如MyBufferedReader就是装饰类(基于FileReader对象的功能进行增强)。 装饰与继承的区别: 装饰模式比继承灵活,避免了继承体系的臃肿,并且降低了类与类之间的关系。 */public class BufferedReaderDemo {public static void main(String[] args) throws IOException{FileReader fr = new FileReader("demo.txt");MyLineNum myln = new MyLineNum(fr);String str = null;while((str = myln.myReadLine())!=null){System.out.println(myln.getLineNum()+":"+str);}myln.myClose();}public static void MyBufferedReaderDemo() throws IOException{method();FileReader fr = new FileReader("demo.txt");MyBufferedReader mybuf = new MyBufferedReader(fr);String str = null;while((str = mybuf.myReadLine())!=null){System.out.println(str);}mybuf.myClose();}public static void method() throws IOException{FileReader fr = new FileReader("demo.txt");BufferedReader bufr = new BufferedReader(fr);String str = null;int num=1;//readLine方法一次读取一行,方便对文本的获取,但是不返回回车符。读取到末尾时返回null。while((str = bufr.readLine())!=null){System.out.println(num +":"+str);num++;}bufr.close();}}class MyBufferedReader{private FileReader r;MyBufferedReader(FileReader r){this.r=r;}//可以一次读取一行的方法public String myReadLine() throws IOException{//定义一个临时容器,原BufferReader封装的是字符数组。StringBuilder sb = new StringBuilder();int ch=0;while((ch=r.read()) != -1){if(ch =='\r')continue;if(ch == '\n')return sb.toString();else {sb.append((char)ch);}}if(sb.length()!=0)return sb.toString();return null;}public void myClose() throws IOException{r.close();}}class MyLineNum {private Reader r;private int num;MyLineNum(Reader r){this.r=r;}public void setLineNum (int num) throws IOException{this.num=num;}public int getLineNum(){return num;}public String myReadLine() throws IOException{num++;//定义一个临时容器,原BufferReader封装的是字符数组。StringBuilder sb = new StringBuilder();int ch=0;while((ch=r.read()) != -1){if(ch =='\r')continue;if(ch == '\n')return sb.toString();else {sb.append((char)ch);}}if(sb.length()!=0)return sb.toString();return null;}public void myClose() throws IOException{r.close();}}FileWriterDemo.java
import java.io.FileWriter;import java.io.IOException;/*IO流是用于操作数据的,数据最常见的提现形式就是文件。Writer的子类FileWriter专门用来操作文件。 *///演示FileWriter功能,不处理异常public class FileWriterDemo {public static void main(String[] args) throws IOException{Method1();Method2();}public static void Method1() throws IOException{//创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件。//而且该文件会被创建到指定的目录下。如果该目录下已有同名文件将被覆盖。FileWriter fw = new FileWriter("demo.txt");//调用write方法,将字符串写入到流中。fw.write("asdfasdf");//flush方法刷新该流的缓冲。将缓冲刷新到目的地中。fw.flush();//关闭流资源,但是关闭之前会刷新一次缓冲区中的数据,将数据写入到目的地中。//和flush的区别在于,flush刷新后流可以继续使用,close刷新后,流会关闭。fw.close();}public static void Method2() throws IOException{//传递一个true参数,代表不覆盖已有文件,在已有文件的文件末尾处进行数据的续写。FileWriter fw = new FileWriter("demo.txt",true);fw.write("\r\nhahah");//在新的一行添加数据fw.close();}}
BufferedWriterDemo.java
import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;public class BufferedWriterDemo {public static void main(String[] args) throws IOException {FileWriter fw = new FileWriter("demo.txt");//为了提高字符写入效率,加入缓冲区,只要将流对象作为参数传递给缓冲区的够早函数即可。BufferedWriter bufw = new BufferedWriter(fw);bufw.write("abcdef");bufw.newLine();//换行bufw.write("abcdef");//只要用到缓冲区,就要刷新缓冲区bufw.flush();//关闭缓冲区就是关闭缓冲区中的流对象,不用再关闭流对象。bufw.close();}}
-------------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------------
0 0
- 黑马程序员-java中IO流的操作总结1
- 黑马程序员-java中IO流的操作总结2
- 黑马程序员 java IO流操作总结
- 黑马程序员+Java中IO的总结
- 黑马程序员+Java中IO流对象的总结
- 黑马程序员-Java中IO流知识点总结
- 黑马程序员-Java中IO流知识点总结
- 黑马程序员-Java IO的学习总结
- 黑马程序员_java中IO流的操作规律
- 黑马程序员__关于学习Java中IO流的FileWriter的总结
- 黑马程序员__关于学习Java的IO流中FileReader的总结
- 黑马程序员 java IO流学习总结
- 黑马程序员---Java基础总结--IO流
- 黑马程序员 Java基础知识总结-IO流
- 黑马程序员--------Java IO流学习总结
- 黑马程序员-java基础-IO流总结
- 黑马程序员--IO流总结--java
- 黑马程序员---java基础---IO流总结
- HDU4965-Fast Matrix Calculation(矩阵快速幂)
- 进程的交互
- [[Journey to the Center of the Linux Kernel: Traffic Control, Shaping and QoS]]
- [置顶] Cocos2d-x使用过程中遇到的错误(VS下开发,移植到Android发布)(更新ing)
- Android versionCode与versionName
- 黑马程序员-java中IO流的操作总结1
- lua学习25:《Lua程序设计(第2版)》第25章
- Android 图表绘制
- SQL查询性能分析
- Android调用系统分享,指定某些应用来分享
- Oracle WebLogic 10.3 连接池参数配置详解
- 避免使用不当pthread_create函数造成内存泄露
- CM源代码的下载地址
- RTSP协议文档翻译