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

------<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);
         }
}
 

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

时间: 2024-11-05 21:49:11

黑马程序员——20.1,IO流,FileWriter,FileReader的相关文章

黑马程序员——Java基础--IO流(一)---字符流和字节流

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.IO流的介绍及体系 IO流用来处理设备之间的数据传输.java对数据的操作是通过流的方式.java用于操作流的对象都在IO包中. 输入流和输出流相对于内存设备而言:将外设中的数据读取到内存中:输入.将内存中的数据写出到外设中:输出. 流按照操作数据分为两种:字节流和字符流. 字符流的由来:其实就是字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字,再对这个文字进行操作

黑马程序员——Java基础——IO流

第一讲 IO概述 1概述:IO流:输入(Input与Output流) 2特点: a.IO流用于数据传输: b.按操作分为字节流与字符流 c.按流向分:输入流和输出流 3.常用IO流的基类 1)字节流的基类:InputStream和OutpuStream 2)字符流的基类:Reader和Writer 第二讲 字符流 一.简述 1.字符流的对象融合了编码表.使用的是默认的编码 2.字符流只能用于文字处理,而字节流可以处理其他: 3.下列把FileWriter和FileReader一起讲 1 pack

黑马程序员——java基础IO流——字符流缓冲区和字节流

字符流的缓冲区 l  缓冲区的出现提高了对数据的读写效率. l  对应类 ?    BufferedWriter ?    BufferedReader l  缓冲区要结合流才可以使用. l  在流的基础上对流的功能进行了增强. 1, BufferedWriter 每次可以写入一行,缓冲区的出现是为了提高流的操作效率而出现的.所以在创建缓冲区之前,必须要先有流对象.该缓冲区中提供了一个跨平台的换行符,newLine(); /* 缓冲区的出现是为了提高流的操作效率而出现的. 所以在创建缓冲区之前,

黑马程序员------Java中IO流学习总结

Java培训.Android培训.iOS培训..Net培训.期待您的交流 一.概念 流:流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流 IO流:用于处理设备上的数据 常用设备:硬盘.内存.键盘录入等 IO流的分类: 1.根据处理的数据类型不同,可分为字节流和字符流. 字符流的由来:因为文件编码的不同,而有了对字符高效操作的字符流对象,原理是基于字节流读取字节时,去查了相关码表. 字符流和字节流的区别: **字节流读取时,读到一个字节就返回一个字节:而字符流是字

黑马程序员——Java基础--IO流(一)---File类以及其他流对象

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.File类 File类是将文件系统中的文件和文件夹封装成了对象.提供了更多的属性和行为可以对这些文件和文件夹进行操作.这些是流对象办不到的,因为流只操作数据.File对象可以作为参数传递给流对象的构造函数.File 类的实例是不可变的:也就是说,一旦创建,File 对象表示的抽象路径名将永不改变. 1.File类中的方法 (1).File类的构造方法以及字段 1 new File(Stri

黑马程序员——Java基础——IO流(二)——File类、Properties类、打印流、序列流

第一件 File类 一.File类 a.用于将文件或者文件夹封装成对象 b.方便对文件与文件夹的属性信息进行操作 c.File对象可以作为参数传递给流的构造函数 d.了解File类中的常用方法 二.File对象的创建 a.File f=new File("a:\\a.txt"): b.File f2=new File("C:\\abc","a.txt");//分开的好处是后一个参数能够使用其他对象如string c.File d=new File

黑马程序员——Java基础——IO流(三)—序列流、管道流、RandomAccessFile类、操作基本数据类型的流对象、操作数组和字符串、字符编码

第一讲 对象序列化(持久化) 一.概述:就是把对象封存在硬盘,可以保持数据:关键类:ObjectInputStream和ObjectOutpurStream 二. 关键字:ObjectOutputStream:方法有writerObject()读取 ObjectInputStream 方法有readObject() 被序列化的对象需要 implements Serializable关于被序列化的类需要实现Serializable它等于一个撮,标识用的,改变类里面的语句就变了.如果想固定一个撮,可

黑马程序员——Java基础——IO流(三)—对象的序列化(持久化),管道流,操作基本数据类型的流对象

第一讲 对象序列化(持久化) 概述: 将堆内存中的对象存入硬盘,以包括对象的数据,称为持久化或序列化 使用的类:ObjectInputStream和ObjectOutputStream 特有方法: ObjectInputStream Object readObject():读取 ObjectOutputStream void writeObject(obj):写入 1 /* 2 * 需求:将一个对象序列化,并从硬盘中读取序列化的对象 3 * 4 */ 5 import java.io.*; 6

黑马程序员——java基础---IO(input output)流字符流

黑马程序员——java基础---IO(input output)流字符流 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- io(input output)流特点: 1,io流用来处理数据之间的传输 2,java对数据的操作是通过流的方式: 3,java用于操作流的对象都在io包中: 4,流按操作数据分为两种:字节流和字符流: 5,流按流向分为:输入流和输出流. 注意:流只能操作数据,而不能操作文件. 3.IO流的常用基类: 1)字节流的抽象