黑马程序员—java—IO流
来源:互联网 发布:带租约商铺 知乎 编辑:程序博客网 时间:2024/05/01 17:04
------- android培训、java培训、期待与您交流! ----------
IO流是用来处理设备之间的数据传输
流按操作数据分为两种:字节流和字符流;
流按流向分为:输入流和输出流;
数据的最常见体现形式是:文件。
字节流的抽象基类:InputStream,OutputStream;
字符流的抽象基类:Reader,Writer;
由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
用Writer子类创建文件写入内容的步骤(3步都得出来异常):
1、创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件,而且该文件会被创建到指定目录下,如果该目录下已有同名文件,将被覆盖;如FileWriter fw=new FileWriter(“demo.txt”);如果需要在此文件中续写,传递一个true参数(如:(“demo.txt”,true),代表不覆盖已有文件,并在已有文件的末尾处进行数据续写;
2、调用write方法,将字符串写入到流中;如fw.write(“abcda”);
3、刷新流对象中的缓冲区的数据,将数据刷到目的地中,如:fw.flush();或fw.close。
如果是读取数据依然可以参照上面的3个步骤,只要创建相应的对象(FileReader)及调用相应的方法(read)就可以了.
以下举个例子:文件的复制及异常处理
import java.io.*;class FileReaderDemo{public static void main(String[] args){FileReader fr=null;FileWriter fw=null;try{fr=new FileReader("FileWriterDemo.java");//创建一个文件读取对象fw=new FileWriter("demo.txt");//创建一个文件写入对象char[] ch=new char[1024];//创建一个数组,用于存储读取的数据int num=0;while((num=fr.read(ch))!=-1){fw.write(ch,0,num);//将数组写入文本中}}catch (IOException e)//IO异常处理{System.out.println(e.toString());}finally{if(fr!=null)try{fr.close();//关闭资源}catch (IOException e){System.out.println(e.toString());} if(fw!=null)try{fw.close();}catch (IOException e){System.out.println(e.toString());}}}}
缓冲区的出现是为了提高流的操作效率而出现的,所以在创建缓冲区之前,必须要先有流对象,有BufferedReader和BufferedWriter;BufferReader缓冲类中值得注意的一个方法readLine(),一行一行的读取,但需注意此方法返回的是字符串,不包括行截止符,所以在调用时需加行截止符;BufferedWriter缓冲类中值得注意的一个方法是newLine(),写入一个行分隔符,只有在这个类中有这个方法,能实现跨平台换行。
以下举个例子:用缓冲区对文件进行复制import java.io.*;class FileBufferReader{public static void main(String[] args) {BufferedReader bufr=null;BufferedWriter bufw=null;try{bufr=new BufferedReader(new FileReader("FileDemo.java"));//创建一个读取缓冲区bufw=new BufferedWriter(new FileWriter("Demo.txt"));//创建一个写入缓冲区String line=null;//定义一个字符串中转站while((line=bufr.readLine())!=null)//循环读写实现拷贝数据{bufw.write(line);bufw.newLine();//插入换行符bufw.flush();}}catch (IOException e ){throw new RuntimeException("读写失败");}finally{try{if(bufr!=null)bufr.close();//关闭资源}catch (IOException e){throw new RuntimeException("读取关闭失败");}try{if(bufw!=null)bufw.close();}catch (IOException e){throw new RuntimeException("写入关闭失败");}}}}装饰设计模式:当想要对已有的对象进行功能增强时,可以定义一个类,将已有对象传入,基于已有对象的功能,并提供加强功能,那这个自定义的类就称为装饰类。
装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能。
装饰模式比继承要灵活,避免了继承体系臃肿,而且降低了类与类之间的关系;装饰类因为增加已有对象,具备的功能和已有的是相同的,只不过提供了更强功能,所以装饰类和被装饰类通常是都属于一个体系中。
流操作的基本规律:通过三个明确来完成
1、明确源和目的;源:输入流,InputStream Reader;目的:输出流,OutputStream Writer。
2、操作的数据是否是纯文本;是:字符流;不是:字节流。
3、当体系明确后,在明确要使用哪个具体的对象,通过设备进行区分;源设备:内存,硬盘,键盘;目的设备:内存,硬盘,控制台。
递归要注意:
1、限定条件;2、要注意递归的次数,尽量避免内存溢出。
打印流:该流提供了打印方法,可以将各种数据类型的数据都原样打印。
字节打印流:PrintStream
构造函数可以接收的参数类型:
1、file对象,File;2、字符串路径,String;
3、字节输出流OutputStream。
字符打印流:PrintWriter
构造函数可以接收的参数类型:
1、file对象,File;2、字符串路径,String;
3、字节输出流OutputStream;
4、字符输出流。
- 黑马程序员——java IO流
- 黑马程序员—java—IO流
- 黑马程序员——Java IO流
- 黑马程序员——Java IO流
- 黑马程序员——java-IO流
- 黑马程序员java学习—IO流
- 黑马程序员—Java中的IO流
- 黑马程序员—io流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员 — IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员——Java IO概述
- 黑马程序员——Java IO
- Easy Binary Compatible Interfaces Across Compilers in C++
- STL概述
- WPF学习之启动窗体设置
- ORACLE 触发器实现主键自动填充
- POJ 3259 Wormholes
- 黑马程序员—java—IO流
- 实现JavaBean和json之间的相互转换
- android自定义布局中的平滑移动
- Ubuntu 13.04 – Install Jetty 9
- poj 2226 Muddy Fields(二分图)
- Exception:线程间操作无效: 从不是创建控件的线程访问它 解决方案
- ProgressBar自定义漂亮样式样式
- 面对SEO越来越空泛的局面我们应该做何选择
- WebService服务的发布及多种客户端方式调用