zoukankan      html  css  js  c++  java
  • Java基础学习-IO流

    • 1.概念
      • IO流用来处理设备之间的数据传输
      • Java对数据的操作是通过流的方式
      • Java用于操作流的类都在IO包中
      • 流按流向分为两种:输入流,输出流。
      • 流按操作类型分为两种:
        • 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
        • 字符流 : 字符流只能操作纯字符数据,比较方便。

      对于文件内容的操作主要分为两大类,其中,字符流有两个抽象类:Writer   Reader.

      其对应子类FileWriter和FileReader可实现文件的读写操作

      BufferedWriter和BufferedReader能够提供缓冲区功能,用以提高效率

      同样,字节流也有两个抽象类:InputStream   OutputStream

      其对应子类有FileInputStream和FileOutputStream实现文件读写

      BufferedInputStream和BufferedOutputStream提供缓冲区功能

    字符流

    • 字符流的写入

     1 import java.io.File;
     2 import java.io.FileWriter;
     3 import java.io.IOException;
     4  
     5 public class Demo {
     6     public static void main(String[] args ) {
     7          
     8         //创建要操作的文件路径和名称
     9         //其中,File.separator表示系统相关的分隔符,Linux下为:/  Windows下为:\
    10         String path = File.separator + "home" + File.separator + "siu" +
    11                       File.separator + "work" + File.separator + "demo.txt";
    12      
    13         //由于IO操作会抛出异常,因此在try语句块的外部定义FileWriter的引用
    14         FileWriter w = null;
    15         try {
    16             //以path为路径创建一个新的FileWriter对象
    17             //如果需要追加数据,而不是覆盖,则使用FileWriter(path,true)构造方法
    18             w = new FileWriter(path);
    19              
    20             //将字符串写入到流中,
    表示换行想有好的
    21             w.write("Nerxious is a good boy
    ");
    22             //如果想马上看到写入效果,则需要调用w.flush()方法
    23             w.flush();
    24         } catch (IOException e) {
    25             e.printStackTrace();
    26         } finally {
    27             //如果前面发生异常,那么是无法产生w对象的
    28             //因此要做出判断,以免发生空指针异常
    29             if(w != null) {
    30                 try {
    31                     //关闭流资源,需要再次捕捉异常
    32                     w.close();
    33                 } catch (IOException e) {
    34                     e.printStackTrace();
    35                 }
    36             }
    37         }
    38     }
    39 }
    • 利用字符流的缓冲区来进行文本文件的复制

     1 import java.io.BufferedReader;
     2 import java.io.BufferedWriter;
     3 import java.io.File;
     4 import java.io.FileReader;
     5 import java.io.FileWriter;
     6 import java.io.IOException;
     7  
     8 public class Demo {
     9     public static void main(String[] args ) {
    10          
    11         String doc = File.separator + "home" + File.separator + "siu" +
    12                       File.separator + "work" + File.separator + "demo.txt";
    13          
    14         String copy = File.separator + "home" + File.separator + "siu" +
    15                      File.separator + "life" + File.separator + "lrc.txt";
    16  
    17         FileReader r = null;
    18         FileWriter w = null;
    19         //创建缓冲区的引用
    20         BufferedReader br = null;
    21         BufferedWriter bw = null;
    22         try {
    23             r = new FileReader(doc);
    24             w = new FileWriter(copy);
    25             //创建缓冲区对象
    26             //将需要提高效率的FileReader和FileWriter对象放入其构造函数内
    27             //当然,也可以使用匿名对象的方式 br = new BufferedReader(new FileReader(doc));
    28             br = new BufferedReader(r);
    29             bw = new BufferedWriter(w);
    30              
    31             String line = null;
    32             //读取行,直到返回null
    33             //readLine()方法只返回换行符之前的数据
    34             while((line = br.readLine()) != null) {
    35                 //使用BufferWriter对象的写入方法
    36                 bw.write(line);
    37                 //写完文件内容之后换行
    38                 //newLine()方法依据平台而定
    39                 //windows下的换行是
    
    40                 //Linux下则是
    
    41                 bw.newLine();
    42             }      
    43              
    44         } catch (IOException e) {
    45             e.printStackTrace();
    46         } finally {
    47             //此处不再需要捕捉FileReader和FileWriter对象的异常
    48             //关闭缓冲区就是关闭缓冲区中的流对象
    49             if(br != null) {
    50                 try {
    51                     r.close();
    52                 } catch (IOException e) {
    53                     e.printStackTrace();
    54                 }
    55             }
    56             if(bw != null) {
    57                 try {
    58                     bw.close();
    59                 } catch (IOException e) {
    60                     e.printStackTrace();
    61                 }
    62             }
    63         }
    64     }
    65 }
    • 二进制文件的复制

    •  1 import java.io.File;
       2 import java.io.FileInputStream;
       3 import java.io.FileOutputStream;
       4 import java.io.IOException;
       5  
       6 public class Demo {
       7     public static void main(String[] args ) {
       8           
       9         String bin = File.separator + "home" + File.separator + "siu" +
      10                       File.separator + "work" + File.separator + "一个人生活.mp3";
      11          
      12         String copy = File.separator + "home" + File.separator + "siu" +
      13                       File.separator + "life" + File.separator + "一个人生活.mp3";
      14          
      15         FileInputStream i = null;
      16         FileOutputStream o = null;
      17          
      18         try {
      19             i = new FileInputStream(bin);
      20             o = new FileOutputStream(copy);
      21              
      22             //循环的方式读入写出文件,从而完成复制
      23             byte[] buf = new byte[1024];
      24             int temp = 0;
      25             while((temp = i.read(buf)) != -1) {
      26                 o.write(buf, 0, temp);
      27             }
      28  
      29         } catch (IOException e) {
      30             e.printStackTrace();
      31         } finally {
      32             if(i != null) {
      33                 try {
      34                     i.close();
      35                 } catch (IOException e) {
      36                     e.printStackTrace();
      37                 }
      38             }
      39             if(o != null) {
      40                 try {
      41                     o.close();
      42                 } catch (IOException e) {
      43                     e.printStackTrace();
      44                 }
      45             }
      46         }
      47     }
      48 }
      • 对象流的操作:

      •  1 public class ObjectInputStream {
         2 
         3     /**
         4      * @param args
         5      * @throws IOException 
         6      * @throws ClassNotFoundException 
         7      * @throws FileNotFoundException 
         8      * 读取对象,反序列化
         9      */
        10     public static void main(String[] args) throws IOException, ClassNotFoundException {
        11         ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));
        12         Person p1 = (Person) ois.readObject();
        13         Person p2 = (Person) ois.readObject();
        14         System.out.println(p1);
        15         System.out.println(p2);
        16         ois.close();
        17     }
        18 
        19 }
  • 相关阅读:
    Codeforces Round #344 (Div. 2) C. Report 其他
    Codeforces Round #344 (Div. 2) B. Print Check 水题
    Codeforces Round #344 (Div. 2) A. Interview 水题
    8VC Venture Cup 2016
    CDOJ 1280 772002画马尾 每周一题 div1 矩阵快速幂 中二版
    CDOJ 1280 772002画马尾 每周一题 div1 矩阵快速幂
    CDOJ 1279 班委选举 每周一题 div2 暴力
    每周算法讲堂 快速幂
    8VC Venture Cup 2016
    Educational Codeforces Round 9 F. Magic Matrix 最小生成树
  • 原文地址:https://www.cnblogs.com/soongkun/p/4885498.html
Copyright © 2011-2022 走看看