积累系统性知识
积聚技术精华
  首页    个人中心    撰写积文    建立课题    订立目标    整理积文    管理课题    管理目标    技能Get    代码积累 
JAVA进阶-IO流(1)
error997 (error997)    2015-05-10 19:11:14      目标    课题
   http://download.csdn.net/detail/qq285016127/7963747
   Java对文件的操作API一般分为字节流 字符流 其为文件的读写API框架也是通过这个思想去扩展的.另外,在流的流向中也分为源流和宿流.如图(流的主体是根据流向决定,如输入InputStream/输出流OutPutStream)
   <1>从整个框架上看,io流的主要知识点分为:
   1.字节流(输入FileInputStream/输出FileOutputStream)
   1)字节流的构造一般都会通过文件File类,或者文件的绝对路径
   2)文件的读取需要FileInputStream类,其read()提供了3个方法,需要我们提供最基本的byte字节数组,该数组作为缓冲流数据默认情况下,没有参数的时候系统会默认一个只有长度1的数组.每次读完,即把数据放在缓冲区中.
   3)FileInputStream提供了available()对象方法,返回未阻塞的数据长度.一般数据较小的情况下 ,我们可以声明缓冲区的长度为此长度.一次读入内存;
   4)文件的写入需要FileOutputStream类,其write()也提供了上面三种类型的方法.
   示例代码如下:

切换到: 纯代码  
   
/** 
 *      字节流简单应用 
 * 
 *  @author Lean  @date:2014-9-22   
 */  
public class OutputStreamSample {  
  
    public static void main(String[] args) {  
        String filePath = "C:/Users/Administrator/Desktop/aa.txt";  
        String outFilePath = "C:/Users/Administrator/Desktop/bb.txt";  
        InputStream fis=null;  
        OutputStream fos=null;  
        int readNum=0;  
        //必须为2的n次方,因为数据可能存在字符   
        byte[] buff=new byte[2];  
        try {  
            fis=new FileInputStream(filePath);  
            //通过File,File全路径 或者文件描述器构造 如果没有文件 则自动创建   
            fos=new FileOutputStream(outFilePath);  
            while ((readNum=(fis.read(buff)))!=-1) {  
                //根据偏移量写入文件   
                fos.write(buff,0,readNum);  
            }  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }finally{  
            try {  
                if (fos!=null) {  
                    fos.close();  
                }  
                if (fis!=null) {  
                    fis.close();  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
          
    }  
      
}


   /**
 *      字节流简单应用
 *
 *    @author Lean  @date:2014-9-22  
 */
public class OutputStreamSample {

   public static void main(String[] args) {
      String filePath = "C:/Users/Administrator/Desktop/aa.txt";
      String outFilePath = "C:/Users/Administrator/Desktop/bb.txt";
      InputStream fis=null;
      OutputStream fos=null;
      int readNum=0;
      //必须为2的n次方,因为数据可能存在字符
      byte[] buff=new byte[2];
      try {
         fis=new FileInputStream(filePath);
         //通过File,File全路径 或者文件描述器构造 如果没有文件 则自动创建
         fos=new FileOutputStream(outFilePath);
         while ((readNum=(fis.read(buff)))!=-1) {
            //根据偏移量写入文件
            fos.write(buff,0,readNum);
         }
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }finally{
         try {
            if (fos!=null) {
               fos.close();
            }
            if (fis!=null) {
               fis.close();
            }
         } catch (IOException e) {
            e.printStackTrace();
         }
      }
      
   }
   
}
   2.字符流,也有称为转换流(InputStreamReader/OutputStreamWriter)
   1)字符转换流,沿用上面的思想,也提供了读取操作,只不过该缓冲区的定义数组为char[ ];
   2)字符转换流为字节流的装饰器,集成了字节流的优势,效率较高.代码如下:

切换到: 纯代码  
   
/** 
 *      字符流简单应用 
 * 
 *  @author Lean  @date:2014-9-22   
 */  
public class CharacterIOSample {  
      
    public static void main(String[] args) {  
        final String filePath = "C:/Users/Administrator/Desktop/aa.txt";  
        final String outFilePath = "C:/Users/Administrator/Desktop/bb.txt";  
          
        Writer writer=null;  
        Reader reader=null;  
        char[] buff=new char[512];  
        int readNum=0;  
        try {  
            reader=new InputStreamReader(new FileInputStream(filePath));  
            writer=new OutputStreamWriter(new FileOutputStream(outFilePath));  
            while ((readNum=reader.read(buff))!=-1) {  
                writer.write(buff,0,readNum);  
            }  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }finally{  
            try {  
                if (writer!=null) {  
                    writer.close();  
                }  
                if (reader!=null) {  
                    reader.close();  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
              
        }  
          
    }  
      
}


   /**
 *      字符流简单应用
 *
 *    @author Lean  @date:2014-9-22  
 */
public class CharacterIOSample {
   
   public static void main(String[] args) {
      final String filePath = "C:/Users/Administrator/Desktop/aa.txt";
      final String outFilePath = "C:/Users/Administrator/Desktop/bb.txt";
      
      Writer writer=null;
      Reader reader=null;
      char[] buff=new char[512];
      int readNum=0;
      try {
         reader=new InputStreamReader(new FileInputStream(filePath));
         writer=new OutputStreamWriter(new FileOutputStream(outFilePath));
         while ((readNum=reader.read(buff))!=-1) {
            writer.write(buff,0,readNum);
         }
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }finally{
         try {
            if (writer!=null) {
               writer.close();
            }
            if (reader!=null) {
               reader.close();
            }
         } catch (IOException e) {
            e.printStackTrace();
         }
         
      }
      
   }
   
}
   3.缓冲流(BufferedReader/BufferedWriter)
   1)缓冲流为字符转换流的装饰器,集成了字符转换流的优势,效率有所较高,并提供了读取整行,写入整行的方法.
   2)缓冲流,顾名思义就是内置了缓冲数据,我们不需要为此再写缓冲数据(char[] / byte[]);

切换到: 纯代码  
   
/** 
 *      内置缓冲流简单应用 
 *  
 * @author Lean @date:2014-9-22 
 */  
public class BufferedIOSample {  
  
    public static void main(String[] args) {  
        final String filePath = "C:/Users/Administrator/Desktop/aa.txt";  
        final String outFilePath = "C:/Users/Administrator/Desktop/bb.txt";  
  
        BufferedWriter writer = null;  
        BufferedReader reader = null;  
        String appendStr =null;  
        try {  
            reader = new BufferedReader(new InputStreamReader(  
                    new FileInputStream(filePath)));  
            writer = new BufferedWriter(new OutputStreamWriter(  
                    new FileOutputStream(outFilePath)));  
            while ((appendStr = reader.readLine()) != null) {  
                System.out.println(appendStr);  
                writer.write(appendStr);  
            }  
            writer.flush();  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }finally{  
            try {  
                if (writer!=null) {  
                    writer.close();  
                }  
                if (reader!=null) {  
                    reader.close();  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
          
    }  
  
}


   /**
 *       内置缓冲流简单应用
 * 
 * @author Lean @date:2014-9-22
 */
public class BufferedIOSample {

   public static void main(String[] args) {
      final String filePath = "C:/Users/Administrator/Desktop/aa.txt";
      final String outFilePath = "C:/Users/Administrator/Desktop/bb.txt";

      BufferedWriter writer = null;
      BufferedReader reader = null;
      String appendStr =null;
      try {
         reader = new BufferedReader(new InputStreamReader(
               new FileInputStream(filePath)));
         writer = new BufferedWriter(new OutputStreamWriter(
               new FileOutputStream(outFilePath)));
         while ((appendStr = reader.readLine()) != null) {
            System.out.println(appendStr);
            writer.write(appendStr);
         }
         writer.flush();
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }finally{
         try {
            if (writer!=null) {
               writer.close();
            }
            if (reader!=null) {
               reader.close();
            }
         } catch (IOException e) {
            e.printStackTrace();
         }
      }
      
   }

}
   4.对象流(ObjectOutputStream/ObjectInputStream)
   1)该流可以把数据保存到文件中去,保存的对象需要实现Serializable接口,并实现序列码(修改该类有用)
   2)如果保存的对象属性也为对象,也必须实现上面的接口.实现该接口的作用为支持持久化/网络传输
   3)保存的对象文件乱码,无法直接打开.但如果想更加安全,必须实现另一个接口Externalizable实现自己的保存策略.

切换到: 纯代码  
   
/** 
 *       
 * 
 *  @author Lean  @date:2014-9-22   
 */  
public class ObjectIOSample {  
      
    public static void main(String[] args) {  
        saveObject();  
        readObject();  
    }  
      
    public static void saveObject(){  
        String filePath="C:\\Users\\Administrator\\Desktop\\cc.txt";  
        ObjectOutputStream oos=null;  
        try {  
            oos=new ObjectOutputStream(new FileOutputStream(filePath));  
            oos.writeObject(new Student(1, "Lean", 82));  
            oos.writeObject(new Student(2, "Lucy", 62));  
            oos.writeObject(new Student(3, "Lout", 85));  
              
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }finally{  
            if (oos!=null) {  
                try {  
                    oos.close();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }   
      
    public static void readObject(){  
        String filePath="C:\\Users\\Administrator\\Desktop\\cc.txt";  
        ObjectInputStream ios=null;  
        try {  
            ios=new ObjectInputStream(new FileInputStream(filePath));  
            Object object=null;  
            for (int i = 0; i < 3; i++) {  
                System.out.println(ios.readObject());  
            }  
        }  catch (ClassNotFoundException e) {  
            e.printStackTrace();  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }finally{  
            if (ios!=null) {  
                try {  
                    ios.close();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }   
      
}


   /**
 *      
 *
 *    @author Lean  @date:2014-9-22  
 */
public class ObjectIOSample {
   
   public static void main(String[] args) {
      saveObject();
      readObject();
   }
   
   public static void saveObject(){
      String filePath="C:\\Users\\Administrator\\Desktop\\cc.txt";
      ObjectOutputStream oos=null;
      try {
         oos=new ObjectOutputStream(new FileOutputStream(filePath));
         oos.writeObject(new Student(1, "Lean", 82));
         oos.writeObject(new Student(2, "Lucy", 62));
         oos.writeObject(new Student(3, "Lout", 85));
         
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }finally{
         if (oos!=null) {
            try {
               oos.close();
            } catch (IOException e) {
               e.printStackTrace();
            }
         }
      }
   } 
   
   public static void readObject(){
      String filePath="C:\\Users\\Administrator\\Desktop\\cc.txt";
      ObjectInputStream ios=null;
      try {
         ios=new ObjectInputStream(new FileInputStream(filePath));
         Object object=null;
         for (int i = 0; i < 3; i++) {
            System.out.println(ios.readObject());
         }
      }  catch (ClassNotFoundException e) {
         e.printStackTrace();
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }finally{
         if (ios!=null) {
            try {
               ios.close();
            } catch (IOException e) {
               e.printStackTrace();
            }
         }
      }
   } 
   
}

切换到: 纯代码  
   
/** 
 *  @author Lean  @date:2014-9-22   
 */  
public class Student implements Serializable{  
  
    private int id;  
    private String name;  
    private int score;  
      
    public Student(int id, String name, int score) {  
        this.id = id;  
        this.name = name;  
        this.score = score;  
    }  
  
    @Override  
    public String toString() {  
        return "Student [id=" + id + ", name=" + name + ", score=" + score  
                + "]";  
    }  
      
}


   /**
 *    @author Lean  @date:2014-9-22  
 */
public class Student implements Serializable{

   private int id;
   private String name;
   private int score;
   
   public Student(int id, String name, int score) {
      this.id = id;
      this.name = name;
      this.score = score;
   }

   @Override
   public String toString() {
      return "Student [id=" + id + ", name=" + name + ", score=" + score
            + "]";
   }
   
}
   (PS:另一章高级部分正在总结....)

转自 http://blog.csdn.net/qq285016127/article/details/39501003
(+0)技能Get

建议楼主:搜索关键字 |参考其他资源 |回复 |追问
  error997(error997):   个人中心    课题    目标    代码积累