黑马程序员_JavaIO流(一)

IO(Input Output)流

概述:

  • IO流(数据流)用来处理设备之间的数据传输。
  • Java对数据的操作是通过流的方式。
  • Java用于操作流的对象都在IO包中。
  • 流按操作数据分为两种:字节流与字符流。
  • 流按流向分为:输入流,输出流。

IO流常用基类:

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

字符流的抽象基类:Rander,Writer。

注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。如:InputStream的子类FileInputStream,Rreader的子类FileReader。

 

FireWriter

既然IO流是用于操作数据的,那么数据最常见的体现形式是:文件。那么先以操作文件为主来演示。

需求:在硬盘上,创建一个文件并写入一些文字数据。找到一个专门用于操作文件的Writer子类对象。FileWriter。  后缀名是父类名,前缀名是该流对象的功能。

//创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件。

//而且该文件会被创建到指定的目录下的。“new”在堆内存中产生一个对象,同时在指定的目录下产生一个指定名称的文件。

//如果该目录下已有同名文件,将被覆盖。其实该步就是在明确数据要存放的目的地。

FileWriter fw = new FileWriter("demo.txt");//未报告的异常 java.io.IOException:必须对其进行捕捉,或声明以便抛出。

//凡是能和设备上数据发生关系去处理的收回发生IO异常。无论读,还是写,或者创建。

//调用write方法,将字符串写入到流中。

fw.write("abcde");

//刷新流对象中的缓冲中的数据。将数据刷到目的地中。

//fw.flush();

fw.close();//关闭流资源,但是关闭前会刷新一次内部的缓冲中的数据,将数据刷到目的地中,和flush刷新后流可以继续使用。close刷新后将流关闭。

//流对象调用的是系统中的资源进行数据的建立,所以close动作必须要做。

 

IO异常处理方式

标准IO异常处理方式:

import java.io.*;

class FileWriterDemo2;
{
    public static void main(String[] args)
    {
        FileWriter fw = null;//外建引用,try内初始。
        try
        {
            fw = new FileWriter("demo.txt");
            fw.write("abcdefg");
        }
        catch(IOException e)
        {
            System.out.println(e.toString());
        }
        finally
        {
            try
            {
                if(fw!null)//提高代码健壮性。注意多流情况下要分别去关。
                {
                     fw.close();
                }
            }
            catch(IOException e)
            {
                 System.out.println(e.toString());
            }
            
          
        }

    }
}

 

文件的续写

 FileWriter fw = new FileWriter("demo.txt",true);//传递一个true参数,代表不覆盖已有的文件,并在已有文件的末尾处进行数据的续写。

在windows当中,回车符是由两个字符来表示的,\r和\n。在Linux中,\n代表换行。(单独的\n在windows中不能识别,所以显示出一个小黑格。)

 

文本文件读取方式一

第一种方式:通过read方法获取。

import java.io.*;

class FileReaderDemo
{
    public static void main(String[] args)throws IOException
    {
        //创建一个文件读取流对象,和指定名称的文件相关联。
        //要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException。
   
        FileReader fr = new FileReader("demo.txt");
        
        //调用读取流对象的read方法。
        //read()一次读一个字符,而且会自动往下读。\

        int ch = 0;
        while((ch=fr.read())!=-1)
        {
            System.out.print((char)ch);

        }
        /*
        while(true)
        {
            int ch = fr.raed();
            if(ch==-1)
                 break;
 
            System.out.print("ch"=+(char)ch);
         }
         */

            fr.close();
    }
}

 

 

文本文件读取方式二 

第二种方式:通过字符数组进行获取。

import java.io.*;

class FileReaderDemo
{
    public static void main(String[] args)throws IOException
    {
        
   
        FileReader fr = new FileReader("demo.txt");
        
        //定义一个字符数组,用于储存读到的字符。
       //该read(char[])返回的是读到字符的个数。

        char[] buf = new char[](1024);//通常定义为1024的整数倍。
        
        int num = 0;

        while((num=fr.read(buf))!=-1)
        {
            System.out.println(new String(buf,0,num));

        }
        fr.close();

 

 

 文本文件读取练习

练习:读取一个.java文件,并打印在控制台上。

 

import java.io.*;

class FileReaderTest
{
    public static void main(String[] args)throws IOException
    {
        
   
        FileReader fr = new FileReader("DateDemo.java");
        

        char[] buf = new char[](1024);
        
        int num = 0;

        while((num=fr.read(buf))!=-1)
        {
      
//此处不加ln,是因为当文本文件大于1024时,在不该换行的时候却换行了。 System.out.print(
new String(buf,0,num)); } fr.close();

 

 拷贝文本文件

讲C盘一个文本文件复制到D盘

复制的原理:其实就是将C盘下的文件数据存储到D盘下的一个文件中。

步骤:

1,在D盘创建一个文件。用于存储C盘中的数据。

2,定义一个读取流和C盘文件关联。

3,通过不断的读写完成数据存储。

4,关闭资源。

import java.io.*;

class CopyTest
{
    public static viod main(String[] args)throws IOException
    {
        copy_1();

    }
    //从C盘读一个字符,就往D盘写一个字符。
    public static void copy_1()throws IOException
    {
        //创建目的地。
        FileWriter fw = new FileWrtier("RuntimeDemo_copy.txt);

        //与已有文件关联。
        FileReader fr = new FileReader("RuntimeDemo.java");

        int ch = 0;

        while((ch=fr.read())!=-1)
        {
            fw.write(ch);
        }
        
        fw.close();
        fr.close();
    }

}

 

 读取多个字符:

public static viod copy_2();
{
    FileWriter fw = null;
    FileReader fr = null;
    try
    {
        fw = new FileWriter("SystemDemo_copy.txt");
        fr = new FileReader("StstemDemo.java");
        
        char [] buf = new char[1024];

        int len = 0;

        while((len = fr.read(buf))!-1)
        {
            fw.write(buf,0,len);

        }
      
    catch(IOException e)
    {
        throw new RuntimeException("读写失败");
    }

    finally
    {
        if(fr!=null)
            try
            {
                fr.close();
            }
            catch(IOExceprtion e)
            {
                
            }
         if(fw!=null)
            try
            {
                fw.close();
            }
            catch(IOExceprtion e)
            {
                
            }
    }

    }

}

 

。。。。。

转载于:https://www.cnblogs.com/594263274qq/p/4865376.html

你可能感兴趣的:(java)