黑马程序员IO流Part1

来源:互联网 发布:python win32api 64 编辑:程序博客网 时间:2024/04/30 06:05

------- android培训java培训、期待与您交流! ----------

 

IO流用来处理设备之间的数据传输;

Java对数据的操作是通过流的方式;

Java用于操作流的对象都在IO包中;

流按操作数据分为两种:

字节流和字符流;

流按流向分为:输入流,输出流。

字节流的抽象基类:InputStream,OutputStream

字符流的抽象基类:Reader,Writer;

流操作的基本规律:

1、明确源和目的;

2、操作的数据是否为纯为本;

3、当体系明确后,在明确要使用哪个具体的对象。

FileWriter,FileReader类:

操作流程:

1、创建相应的流对象,该对象被初始化时必须要明确被操作的文件。而且该文件会被创建到指定

目录下。如果该目录下已有同名文件,将被覆盖(调用第一个构造函数)。 

2、进行相应的读写操作;

3、是否需要进行刷新操作,如果需要,则需要进行刷新;

4、关闭流,释放资源。

FileWriter:

  

 class  FileWriterDemo {        public static void main(String[] args) throws IOException {                   /*创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。*/            FileWriter fw = new FileWriter("demo.txt");            //调用write方法,将字符串写入到流中。            fw.write("abcde");            /*刷新流对象中的缓冲中的数据。           将数据刷到目的地中。*/            //fw.flush();                 /*关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。               将数据刷到目的地中。               和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。  */    fw.close();      }   }  


 

 

文件的续写:通过构造方法创建可续写文件的流对象。


  public static void main(String[] args) throws Exception {         FileWriter fw = new FileWriter("demo.text",true);//续写,不覆盖已有的文件     fw.write("abc");                fw.close();    } 


  

文件拷贝代码片段:

       通过FileReader读取指定文件中的内容,创建一个1M大小字符数组缓冲区,再由FileWriter流对象写入指定的目标文件。

   public static void copy_2() throws Exception {                        FileReader fr = new FileReader("D:\\testsrc.txt");//创建FileReader对象指向要读取的文件                        FileWriter fw = new FileWriter("D:\\dest.txt");//创建FileWriter对象指向要写入的目的文件                        int len = 0;            char[] buf = new char[1024];//创建一个缓冲区                        while((len=fr.read(buf)) != -1) { //读取文件内容               fw.write(buf,0,len);//写入文件内容           }                        fr.close();           fw.close();       }


字符流的缓冲区:

    缓冲区的出现提高了对数据的读写的效率;

对应类:BufferedWrite, BufferedReader;

缓冲区要结合流才可以使用。

    在流的基础上对流的功能进行了增强。

BufferedWrite提供了一个跨平台的换行方法,newLine();

BufferedReader提供了一个读一行的方法,readLine()不包含行终止符。当返回null是,表示已经读到了文件的末尾。

因为在BufferedReader和BufferedWrite中调用了相应的流对象,所以只需要关闭BufferedReader和BufferedWrite,释放资源。

 

装饰设计模式:

当想要对已有的对象进行功能增强时,可以定义一个类,将已有对象传入,基于已有的功能,并提供加强功能。那么自定义的该类称为装饰类。继承和装饰的区别:

装饰模式比继承更灵活,避免了继承体系的臃肿,而且降低了类与类之间的关系。

装饰类因为增强已有对象,具备的功能和已有对象是相同的,只不过提供了更强的功能,所以装饰类和被装饰类通常属于同一个体系中。


read 方法返回的为什么是int类型,而不是byte类型:

  为了防止凑巧读取到8个1(十进制的-1),这样正好符合了判断条件,而此时文件并没有读取结束,所以将byte类型提升为int类型,由4个字节来存放数据,前3个字节补0(方法是将提升后的数据与255进行与运算),避免了出现-1的情况,也保证了原数据没有变化。而write方法在执行时,又将4个字节的int类型转换为了1个字节的byte类型。

 

 

 

------- android培训java培训、期待与您交流! ----------

 

 

0 0
原创粉丝点击