Java之路--Javase篇   IO(1)

android培训、 java培训、期待与您交流!
                         (黑马程序员)    IO
四个基类:InputStream、 OutputStream两个字节流和Reader、Writer两个字符流。
字符流的由来:字符的编码问题而诞生。字符流内部可以指定其使用的编码表。
FileWriter:
Code:
import java.io.*;
class FileWriterDemo
{
  public static void main(String[] args) throws IOException
   {
//创建一个FileWriter对象。该对象一旦被初始化就必须明确其操作的文件,该文件会被创建到指定目录下,如果该目录已有同名文件,原文件将会被覆盖。
     FileWriter fw = new FileWriter("Demo.txt");
//调用write方法,将字符串写入流中,实际就是写入内存的流对象中。
     fw.write("ABCDETY");
//内存中的流对象就是一个缓冲池,需要将其通过flush刷新到数据的目的地。
     fw.flush();
//由于jvm在写数据时其实调用的是windows或者Linux的写文件方法,故会占用其系统资源,我们使用完后务必将其关闭,节省资源。close方法在关闭前会先调用flush方法。
     fw.close();
   }
 }
IOException处理方式
Code:
import java.io.*;
class FileWriterDemo
{
  public static void main(String[] args) throws IOException
   {      
            FileWriter fw = null;//从try块中拿出来是为了避免fw引用在finally块中无法引用
     
       try{         
             fw = new FileWriter("K://Demo.txt");(1)//如果系统中就没有K盘自然会出错,首先创建Demo.txt就会出文件无法找到的错,而fw自然就没有指向对象,则出现指针异常。
          fw.write("ABCDETY");
          fw.flush();
           }
     catch(IOException e)
         {
             System.out.println(建立输入流出错);
          }
     finally
          {  
        try{                //关闭资源也可能出错
             if(fw != null) //(1)如果出现类似错误,务必判断指针
             {
              fw.colse();
              }
            }catch(IOException){System.out.print("关闭出错了"!);}
          }
   }
 }
文件的续写:
使用FileWriter的带参数构造函数通过指定参数中boolean是ture还是false确定是将续写还是写在文件前面。其中boolean为ture表示将续写。具体构造函数如下:
  public  FileWriter(File file,boolean append)throws IOException
文件的读取方式
第一种,单字符形式读取:
 Code:
import java.io.*;
class FileWriterDemo
{
  public static void main(String[] args) throws IOException
  //创建一个文件读取流对象,和指定名称的文件相关联。要保证该文件已经存在,如果不存在就会发生FileNotFoundException
  FileReader fr = new FileReader("demo.txt");
  //调用读取流对象的read方法:read()一次读一个字符,而且会自动向下读。读到文件末尾将返回-1
 int ch =0;
 while((ch=fr.read())!=-1)
  {
    System.out.print((char)ch);
  }
}
第二种,字符数组形式读取
 Code:
  import java.io.*;
  class FileWriterDemo
  {
     public static void main(String[] args) throws IOException
         FileReader fr = null;
         fr = new FileReader(FileWriterDemo.txt);
         char[] buf = new char[1024]; //定义一个字符数组作缓冲,存储读到的字符
          int num = 0;
         while((num=fr.read(buf))!=-1)//read(char[])返回的int是读到的字符数,而第一 种方式中返回的就是读到的字符
         {
           System.out.println(new String(buf,0,num));
          }
        
         fr.close();
       }
  
}
字符流的缓冲区
缓冲区的出现提高了对数据读写的效率。它必须结合流才能使用。是对流功能的加强。缓冲区的底层原理就是封装了数组对象。
写入缓冲区:
Code:
import java.io.*;
class BufferedWriteDemo
{
  public static void main (String[] args) throws IOException
  {
    FileWriter fw = new FileWriter("buf.txt");//创建一个写入流并与目标文件相关联
    BufferedWriter bufw = new BufferedWriter(fw);//给写入流加上缓冲器
    for(int x = 1;x<5;x++)
    {
      bufw.write("abc"+x);
      bufw.newLine();//通用换行方式
      bufw.flush();//有缓冲器必须想到刷新
     } 
    bufw.close();
    
   }
}
读取缓冲区:
Code:
import java.io.*;
class BufferedWriteDemo
{
  public static void main (String[] args) throws IOException
  { 
    FileReader fr = new FileReader("buf.txt"); 
    BufferReader bufr = new bufferedReader(fr);
    String line = null;//中转站
    while((line = bufr.readLine())!=null)//line = bufr.readLine()读的操作返回一个String,当其读到文件尾返回null
    {
      System.out.println(line);  
    }
    bufr.close();//close的就是fr
  }
}
Readline方法原理:无论读取一行,获取多个字符。其实最终都是在硬盘上一个一个读取。所以最终使用的还是read方法一次读一个的方法。当它读取到\n换行符号时就自然而然的将前面读取到的字符形成字符串对外提供。
装饰设计模式
当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,提供加强功能。则自定义的该类成为装饰类。
装饰类通常会通过构造方法接收被装饰的对象,并基于装饰的对象的功能提供更强的功能。
---------------------- android培训、 java培训、期待与您交流! ---------------------- 详细请查看: http://edu.csdn.net/heima

你可能感兴趣的:(IO,Inputstream,OutputStream,reader,Writer,休闲)