黑马程序员_JAVA IO流重要方法与代码示例

来源:互联网 发布:php内部邮件系统 源码 编辑:程序博客网 时间:2024/05/12 04:10
  IO流是java中的非常重要的一部分,它存在着许多实用的方法,下面将会以示例的方式解读io中 一些常用方法的使用。
示例1:在C盘下java文件下的abc文件夹中创建一个def.txt文档,如果abc文件存在则删除文件创建一个新的文件。


import java.io.*;
public class ChuangJianYuShanChu 
{
public static void main(String[] args)
 {
   File  f = new File("C:\\java\\abc");   //封装对象
    if(f.exists()==true)                   //判断该目录是否存在存在就删除目录不存在就创建目录
     {   
       removeDir(f);
     }
   else
    {
      f.mkdirs();
    }
   File d=new File("C:java\\abc\\def.java");//封装新对象 并创建文件
    try
     {
       d.createNewFile();                    
     }
    catch(IOException e)
     {
      e.printStackTrace();
     }
  }
public static void removeDir(File dir)     //定义一个删除目录的方法
          {
     File[] files=dir.listFiles();
              for(int x=0;x<files.length;x++)
                {
              if(files[x].isDirectory())
        removeDir(files[x]); 
              else
            files[x].delete();
                dir.delete();
         }
           }
}
 在上述例子中用到了许多的IO技术,比如判断一个目录是否存在(exists()方法),删除文件(delete()方法),列出文件列表(ListFiles),递归法删除目录(delete()方法不能删除非空目录,因此使用递归法即自己调用自己层层剥离的方法从里到外删除的方法将非空目录删除),创建一个目录(mkdir和mkdirs 其中mkdir是单级目录而mkdirs是可以创建多级目录的)这些IO流的基本方法,示例1是一个综合性稍强的示例,它是上述方法的综合应用,虽然看起来很简单,但是却考察综合能力。
 


示例2:读取一个已有文本文件(C:\\java\\abc\\test.txt),并将文本内容打印出来   


import java.io.*;
public static void DuQuBingDaYin()

    FileReader fr=null; 
    try 
     { 
        fr=new FileReader("C:\\java\\abc\\test.txt");      //将FileReader与目标文件相关联
        int ch=0; 
        while((ch=fr.read())!=-1)                          //读取文件
         { 
            System.out.println((char)ch); 
         } 
     } 
    catch (IOException e)
     { 
        e.printStackTrace(); 
     }
    finally                                                //读取完之后需要关流,需要释放资源,因此定在在finally中
     { 
        if(fr!=null)
           { 
              try 
               { 
                fr.close();  
               } 
              catch (IOException e1) 
               { 
                e1.printStackTrace(); 
               } 
             
           } 
    } 

 上述示例是读取一个已有文本文件(C:\\java\\abc\\test.txt),并将文本内容打印出来。这个示例中用到了 FileReader和FileWriter技术,利用流去读取数据(FileReader.read()),然后将数据打印(BufferedWriter.write(),不过在上述示例中直接将读取的数据使用System.out,println()的方法打印在了控制台上)。不过上述代码是读一个字符写一个字符,虽然也可以读取出来但是效率比较低下,为了提高效率可以自顶一个一个容器,如: char[] buf=new char[1024]。读取一定的字符之后再打印出来,亦或者使用缓冲技术,缓冲技术中可以一行一行的读可以提高效率。后面这两种方法也可以用作复制文件,如:使用缓冲区对文本文件进行复制


import java.io.*
public static void test4()

    BufferedReader bufr=null; 
    BufferedWriter bufw=null; 
     try 
      { 
        bufr=new BufferedReader(new FileReader("D:/a.txt")); 
        bufw=new BufferedWriter(new FileWriter("D:/b.txt")); 
        String line=null; 
        while((line=bufr.readLine())!=null)
           { 
              bufw.write(line);//每次将一行写入缓冲区 
              bufw.flush();//刷新到目的地 
            } 
       } 
      catch (IOException e) 
       { 
          e.printStackTrace(); 
       }
      finally
       { 
          try
            { 
               if(bufw!=null)
                 { 
                   bufw.close(); 
                  } 
            if(bufr!=null)
                 { 
                   bufr.close(); 
                 } 
             } 
           catch (IOException e1)
            { 
                e1.printStackTrace(); 
             } 
       }     



缓冲技术同样也是十分重要的一部分,在这一部分中同样学习了编写自己的缓冲区代码示例如下:

示例3:

import java。io.*;
public class MyBufferedReader 
  {
      private FileReader fr;
      private char[] buf = new char[1024];
      private int count = 0;
      private int pos = 0;


     public MyBufferedReader(FileReader f) 
       {
            this.fr = f;
       }


    public int myRead() throws IOException 
       {
            if (count == 0) 
             {
               count = fr.read(buf);
               pos = 0;
              }
             if (count < 0)
               return -1;
               int ch = buf[pos++];
               count--;
             return ch;
        }


     public String myReadLine() throws IOException 
       {
            StringBuilder sb = new StringBuilder();
            int ch = 0;
            while ((ch = myRead()) != -1) 
            {
                if (ch == '\r')
                   continue;
                if (ch == '\n')
                   return sb.toString();
                   sb.append((char) ch);
                if(count==0)
                  {
                   return sb.toString();
                  }
            }
             return null;
       


     public void myClose() throws IOException 
          {
              fr.close();
          }
}
在这个MyBufferedReader中通过
 while ((ch = myRead()) != -1) 
            {
                if (ch == '\r')
                   continue;
                if (ch == '\n')
                   return sb.toString();
                   sb.append((char) ch);
                if(count==0)
                  {
                   return sb.toString();
                  }
            }
这一部分代码,对回车进行判断 ,这是在使用缓冲技术是应该注意的小事项。
0 0