码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员——20.1,IO流,FileWriter,FileReader

时间:2015-08-09 12:44:12      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:黑马程序员   io流   

------<ahref="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

          

                    黑马程序员——20,IO流,FileWriter,FileReader

 

/*

IO流的介绍:

IO流式用来处理数据传输的,与IO流相关的类都定义在了java.io包里面

按照操作类型分:字节流和字符流,其中的字符流与文字编码表有关。

字节流的抽象基类:

           IntputStream,   OutputStream

字符流的抽象基类:

           Reader,          Writer

*/

import java.io.*;
class  Ioliou
{
         public  static void  main(String[] args)throws  IOException
                   //IO流代码后容易抛出异常,所以一般都会在方法上抛出IOException
         {
                  FileWriter  f=new  FileWriter("f:\\yyyyyyy.txt");
                   //FileWriter是用于操作文件的Writer类的子类对象
                   /*
                   这句话可以指定路径建立对应名字的文件,
                   如果指定路径中已经存在同名文件,那么原本文件会被新建文件覆盖掉。
                   */
                 
                    f.write("jkl"); //将字符串写入流中
                    /*
                    但是此时如果打开yyyyyyy.txt文件看的话发现里面并没有写入jkl
                    这是为什么呢?因为其写入的仅仅是流中,不是写入文件中
                   */
                    f.flush();//刷新流,把流里面的数据刷新到目的地
                    /*
                    此时再打开yyyyyyy.txt文件就会看见写入的jkl
                    */
                    f.close();//这句话作用是先刷新流,接着再关闭流
                    f.write("rty");//由于前面关闭了流,所以这句话是写不进流里面的
                    System.out.println("Hello World!");
         }
}

——————分割线——————

 

/*
IO流异常处理的方式
*/
 
import java.io.*;
class  Ioliou2
{
         public   static  void   main(String[] args)
         {
                   //涉及到IO流的语句一般都会抛出异常,所以try块里面才那么多语句
                   FileWriter  fi=null;
                   //为什么要在前面定义fi为空?
                   /*
                   因为后面的finally块里面有fi,
                   如果只是定义在try块里面,
                   fi的作用域只是在try块里面。
                   而后面还要调用fi.close();
                   所以,这个变量必须是全局变量。
                   至于初始化就放在try块里面。
                   */
                   try
                   {
                            fi=new   FileWriter("f:\\trtrtr.txt");
                       fi.write("123");
                       fi.flush();
 
                   }
                   catch(IOException  e)
                   {
                     soc(e.toString());
                   }
                   finally
                   {
                            try
                            {
                                     if(!(fi==null))
                                  fi.close();
                               /*
                               关闭资源的动作硬要执行,所以放在finally块里面,
                               又因为fi.close();也会抛出IO异常,
                               所以也用try...catch块处理.
                               为什么前面还要加一句判断是否为空?
                               因为有可能开始建立文件就失败了,
                               既然文件建立都失败了,那么还怎么关闭流呢?
                               所以要加一个判断语句。
 
                            */
                            }
 
                            catch(IOException  e)
                            {
                             soc(e.toString());
                            }
                                           
                   }
 
                  
         }
         public  static void  soc(Object  obj)
         {
             System.out.println(obj);                          
         }
}

——————分割线————

 

/*
文件的续写:
*/
import java.io.*;
class  Ioliou3
{
         public  static  void   main(String[] args)
         {
                   FileWriter  fi=null;
                   try
                   {
                   fi=new  FileWriter("f:\\trtrtr.txt",true);
                   /*
                   因为新建文件会覆盖原有文件,所以,FiletWriter类提供一个构造函数
                   FileWriter(String  s,boolean  b)  表示可以在原有文件后面续写数据                     
                   */
                   fi.write("我是\r\n英雄");
                   /*
                   这句话表示输入数据“我是”然后换行接着输入数据“英雄”。
                   为什么要在\n前面加上\r呢?
                   因为\r\n写在一起在window系统里面才表示换行,
                   仅仅是\n只是在java里面才表示换行。
                   如果写的是fi.write("我是\n英雄");
                   那么在java里面显示的确是会换行,但是用window系统里面的工具打开,
                   “我是”与“英雄”之间会有一个黑块。这是window系统无法识别单独的\n的原因。
                   */                       
                   }
                   catch(IOException   e)
                   {
                    soc(e.toString());                                 
                   }
                   finally
                   {
                            try
                            {
                                     fi.close();      
                            }
                            catch(IOException  e)
                            {
                                     soc(e.toString());
                            }
                         
                   }
                  
                   System.out.println("HelloWorld!");
         }
         public  static  void  soc(Object  obj)
         {
             System.out.println(obj);                              
         }
}

————————分割线——————

 

 
/*
数据的读取
*/
import java.io.*;
class  Ioliou4                  
{
         public   static  void  main(String[] args)
         {
                   FileReader   re=null;
                   try
                   {
                   re=new  FileReader("f:\\trtrtr.txt");
                   /*
                   建立一个文件读取流对象,并且指向已经存在的文件!
                   如果文件不存在,运行会发生FileNotFoundException
                   */
                   while(true)
                      {
                           
                        int i=re.read();
                             char ch=(char)i;
                        soc(ch);
                             if(i==-1)
                          break;  
 
                             int i2=re.read();
                             /*
                             read方法一次读取一个字符,返回的是int型数据,可以自动往下读取,
                             而且如果后面读到没有数据可读的时候就会返回-1,如果被强制转成字
                             符打印出来的是一个问号?
                        */
 
                        char ch2=(char)i2;
                        soc(ch2);
                         if(i2==-1)
                             break;
                       }
                   }
                   catch(IOException  e)
                   {
                            soc(e.toString());
                   }
                   finally
                   {
                            try
                            {
                                     re.close();//仅仅是关闭流       
                            }
                            catch(IOException  e)
                            {
                                     soc(e.toString());
                            }
                                 
                   }
 
         }
         public  static void  soc(Object  obj)
         {
                System.out.print(obj);                
         }
}

——————分割线——————

 

 

/*

第二种数据读取方式:调用read(char[]  ch)

                  

按照字符数组长度来读取,返回的是读取到的字符个数,

例如在本题中,长度为3的字符数组,读取的时候从第一位到第三位

填充字符,填充完了就返回填充的个数;再次调用read方法的时候,

会自动往下继续读取字符,又从第一位到第三位重新填充字符;

如果在某一次填充字符过程中,字符数组还没有填充完就没有字符继续填充的情况下,

这一次返回的是本次填充字符的个数,返回值也许不是字符数组长度,

如果在某一次填充字符过程中,字符数组还没有填充完就文件字符换行的情况下,

本次就只是填充到换行处,返回本次填充字符个数,下一次填充字符又从第一位开始填充下一行的字符。

再接下来,继续调用read方法读取,在上一次已经全部读取完字符了,那么这一次,返回值-1

读取一些比较大的文件的时候,一般定义字符数组长度1024

                  

*/

import java.io.*;
class  Ioliou5
{
         public   static  void   main(String[] args)
         {
            FileReader   fr=null;
            try
            {
                fr=new FileReader("f:\\trtrtr.txt");
                char[]  ch=new  char[5]; 
                   int     i  =0;
                   while((i=fr.read(ch))!=-1)
                   {
                   soc(new String(ch,0,i));
                   /*
                 new  String(ch,0,i)表示新建一个字符串,
                 其内容为字符数组ch的从0位开始长度为i的字符组成。
             */    
                   }
                  
                   }
                   catch(IOException  e)
                   {
                      soc(e.toString());
                   }
                   finally
                   {
                            try
                            {
                               fr.close();
                            }
                            catch(IOException   e)
                            {
                               soc(e.toString());
                            }
                       
                             
           }
 
         }
 
         public  static void  soc(Object  obj)
         {
             System.out.println(obj);                        
         }
}

——————分割线——————

 

/*

把文件从f盘复制到d盘

*/

 

import java.io.*;
class   Ioliou6
{
         public  static void  main(String[] args)
         {
            FileWriter  fw=null;
            FileReader  fr=null;
             try
             {
               fw=new FileWriter("d:\\trtrtr_copy.txt"); 
               //建立一个写入流对象,指定存储的路径的文件
               fr=new FileReader("f:\\trtrtr.txt");
              //建立一个读取流对象,与目的地相关联
                char[]  ch=new  char[1024];
                int i=   0;
                 while((i=fr.read(ch))!=-1)
                 {
                    fw.write(ch,0,i);
                                     /*
                    按照字符数组ch从0位开始长度为i把字符写进流中
                           */
 
                 }                          
             }
                   catch(IOException  e)
                   {
                       throw  new  RuntimeException("读写出问题了");
                             //抛出一个运行异常对象
                   }
                   finally
                   {
                            try
                            {
                               if(fw!=null)
                               fw.close(); 
                            }
                            catch(IOException  e)
                            {
                       
                            }
                       try
                       {
                            if(fr!=null)
                            fr.close();
                       }
                       catch (IOException  e2)
                       {
                     
                       }
                           
                   }
 
                  
         }
         public  static void  soc(Object  obj)
         {
               System.out.println(obj);                    
         }
}
 

版权声明:本文为博主原创文章,未经博主允许不得转载。

黑马程序员——20.1,IO流,FileWriter,FileReader

标签:黑马程序员   io流   

原文地址:http://blog.csdn.net/dangaodeaiyi/article/details/47373919

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!