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 }
  • 相关阅读:
    [刘阳Java]_什么是MyBatis_第1讲
    [刘阳Java]_斗胆介绍一下Eclipse快捷键大全[超详细]_第6讲
    [刘阳Java]_避开环境配置快速的使用Java的开发工具_第5讲
    [刘阳Java]_JVM工作流程_第4讲
    [刘阳Java]_Java程序员的成长路线_第3讲
    [刘阳Java]_Java环境搭建_第2讲
    使用node操作mongodb
    mongodb学习
    node多文件处理方法
    yarn工具的使用
  • 原文地址:https://www.cnblogs.com/soongkun/p/4885498.html
Copyright © 2011-2022 走看看