zoukankan      html  css  js  c++  java
  • IO流

    1. I/O   输入/输出

    流(stream):根据方向分为:输入流和输出流。方向是基于我们的程序的,以先进先出的方式发送到信息通道中。流向我们程序的流叫做:输入流;从程序向外流的叫做:输出流。

    2. 输入流是用于获取(读取write())数据的,输出流是用于向外输出(写出 write())数据的。

      InputStream:该接口定义了输入流的特征。

      OutputStream:该接口定义了输出流的特征。

      FileInputStream: 文件输入流,专门用于从文件中读取字节到程序内存中。

      FileOutputStream: 文件输出流,专门用于冲内存中写入字节到文件中。

     1 import java.io.File;
     2 import java.io.FileInputStream;
     3 import java.io.FileNotFoundException;
     4 import java.io.IOException;
     5 
     6 public class Test1 {
     7     public static void main(String[] args) {
     8         // 读取文件中的字节
     9         File file = new File("D:" + File.separator + "javatest"
    10                 + File.separator + "c.txt");
    11         // (1)创建管道
    12         FileInputStream in = null;
    13         try {
    14 
    15             // (2)循环读取字节
    16             in = new FileInputStream(file);
    17             int t;
    18             StringBuilder b = new StringBuilder();
    19             while ((t = in.read()) != -1) {
    20                 b.append((char) t);
    21             }
    22             System.out.println(b.toString());
    23 
    24         } catch (FileNotFoundException e) {
    25             e.printStackTrace();
    26         } catch (IOException e) {
    27             e.printStackTrace();
    28         }
    29 
    30         // (3)关闭管道
    31         try {
    32             in.close();
    33         } catch (IOException e) {
    34             e.printStackTrace();
    35         }
    36     }
    37 }

    注意: FileInputStream 会抛出:FileNotFoundException 异常- 如果该文件不存在,或者它是一个目录,而不是一个常规文件,抑或因为其他某些原因而无法打开进行读取。

               close会抛出:IOException异常 - 如果发生 I/O 错误。

     一次读取多个字节:

     1 import java.io.File;
     2 import java.io.FileInputStream;
     3 import java.io.FileNotFoundException;
     4 import java.io.IOException;
     5 
     6 public class Test2 {
     7     public static void main(String[] args) throws FileNotFoundException, IOException {
     8         File file = new File("D:" + File.separator + "javatest" + File.separator + "t.txt");
     9 //        (1)创建读取通道
    10         FileInputStream in = new FileInputStream(file);
    11 
    12         byte[] buf = new byte[5];
    13 //        (2)管道中读取多个字节到缓冲区
    14         int len;
    15         // len = in.read();//从管道中读取超过len之后返回-1;
    16         StringBuilder b = new StringBuilder();
    17         while ((len = in.read(buf)) != -1) {
    18             String str = new String(buf, 0, len);
    19             b.append(str);
    20         }
    21         System.out.println(b.toString());
    22 //        (3)关闭通道
    23         in.close();
    24     }
    25 
    26 }

    一次写入多个字节:

     1 import java.io.File;
     2 import java.io.FileNotFoundException;
     3 import java.io.FileOutputStream;
     4 import java.io.IOException;
     5 
     6 public class Test1 {
     7     public static void main(String[] args) throws FileNotFoundException, IOException {
     8         File file = new File("D:"+File.separator+"javatest"+File.separator+"x.txt");
     9 //        (1)创建输出流管道
    10         FileOutputStream out = new FileOutputStream(file);
    11 //        (2)写入数据到到管道中,
    12         
    13         /*一次写入一个字节
    14          * out.write(97);
    15          * out.write(98);
    16          * out.write(99);
    17         */
    18         
    19         //一次写入多个字节
    20         String str = "hello 广州";//根据不同系统,默认的编码不同,本平台是Windows简体中文,所以默认GBK编码
    21         byte[] buf = str.getBytes();
    22         out.write(buf);
    23         
    24         /*byte[] buf = str.getBytes("UTF-8");
    25         out.write(buf);*/ // 自定义编码导入;
    26         
    27         System.out.println("写入完成");
    28         
    29 //        (3)关闭流
    30         out.close();
    31         
    32     }
    33 
    34 }

     InputStream/OutputStream 用于字节的读写。主要用于读取二进制文件(图片、音频、视频),也可以读取文件性文件。

    3. 转换流

    InputStreamReader 继承于Reader,是字节流通向字符流的桥梁,可以把字节流按照指定编码 解码 成字符流。

    OutputStreamWriter 继承于Writer,是字符流通向字节流的桥梁,可以把字符流按照指定的编码 编码 成字节流。

    1)OutputStreamWriter 创建一个字符集的输出流

     1 import java.io.File;
     2 import java.io.FileNotFoundException;
     3 import java.io.FileOutputStream;
     4 import java.io.IOException;
     5 import java.io.OutputStreamWriter;
     6 
     7 public class Test2 {
     8     public static void main(String[] args) throws IOException, FileNotFoundException {
     9         //程序输出,写入文档
    10         String str = "Hello广州";
    11         File file = new File("D:"+File.separator+"javatest"+File.separator+"z.txt");
    12         //创建管道
    13         
    14         FileOutputStream out = new FileOutputStream(file);
    15         OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8");
    16         
    17         //写入管道
    18         writer.write(str);
    19         
    20         //刷新缓冲区
    21         writer.flush();
    22         
    23         //关闭管道
    24         out.close();
    25         writer.close();
    26         
    27         System.out.println("完成写入");
    28         
    29     
    30     }
    31 
    32 }

    2)InputStreamReader 创建一个字符集的输入流

     1 import java.io.File;
     2 import java.io.FileInputStream;
     3 import java.io.FileNotFoundException;
     4 import java.io.IOException;
     5 import java.io.InputStreamReader;
     6 import java.io.UnsupportedEncodingException;
     7 
     8 public class Test3 {
     9     public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException, IOException  {
    10         File file = new File("D:" + File.separator + "javatest"
    11                 + File.separator + "d.txt");
    12 
    13         // 建立管道
    14         FileInputStream in = new FileInputStream(file);
    15         InputStreamReader reader = new InputStreamReader(in, "UTF-8");
    16 
    17         // 读写文件
    18         char[] cbuf = new char[2];
    19         int len;
    20 
    21         StringBuilder sb = new StringBuilder();
    22         while ((len = reader.read(cbuf)) != -1) {
    23             sb.append(cbuf, 0, len);
    24         }
    25         System.out.println(sb.toString());
    26     }
    27 
    28 }

     读取一个默认GBK编码的文件

     1 import java.io.File;
     2 import java.io.FileReader;
     3 import java.io.IOException;
     4 
     5 public class Test4 {
     6     public static void main(String[] args) throws IOException {
     7         // 读取一个本地的GBK编码文件 (本平台是Windows简体中文)
     8 
     9         File file = new File("D:" + File.separator + "javatest"
    10                 + File.separator + "a.rar");
    11         // 1创建管道
    12         /*
    13          * 可以不写这种方式 FileInputStream in = new FileInputStream(file);
    14          * InputStreamReader reader = new InputStreamReader(in, "GBK");
    15          */
    16 
    17         FileReader reader = new FileReader(file);
    18         char[] cbuf = new char[2];
    19         int len;
    20         // 2读取
    21         StringBuilder sb = new StringBuilder();
    22         while ((len = reader.read(cbuf)) != -1) {
    23             sb.append(cbuf, 0, len);
    24 
    25         }
    26 
    27         // 3关闭管道
    28         reader.close();
    29         cbuf.clone();
    30 
    31         System.out.println(sb.toString());
    32 
    33     }
    34 
    35 }

     4.缓冲字符高级流 BufferedWriter 和 BufferedReader

     1)BufferedWriter是缓冲字符输入流,以 作为单位写入字符

     2)BufferedReader是缓冲字符输出流,以 作为单位读取字符

    5月初的广州不出太阳不升温,反而一连下了一个多星期的雨,返春寒了。

    来个需求利用BufferedWriter写个一首诗到文本里 如:

    惊闻昨夜大雨,
    今晨河流湍急。
    偶遇柱上蜗牛,
    一步一步寻梦。
    你我怎可知?

     1 import java.io.BufferedWriter;
     2 import java.io.File;
     3 import java.io.FileWriter;
     4 import java.io.IOException;
     5 
     6 public class Test1 {
     7     public static void main(String[] args) throws IOException {
     8         File file = new File("D:" + File.separator + "javatest"
     9                 + File.separator + "c.txt");
    10         // 创建通道,以默认编码写入诗
    11         FileWriter writer = new FileWriter(file);
    12         BufferedWriter bWriter = new BufferedWriter(writer);
    13 
    14         // 写入一行
    15         bWriter.write("惊闻昨夜大雨,");
    16         bWriter.newLine();// 回车换行
    17         /*
    18          * bWriter.writer("
    "); 不建议这样写(因为windows平台可以这样写,如果是Linux或Mac则是"
    ")
    19          */
    20         bWriter.write("今晨河流湍急。");
    21         bWriter.newLine();
    22         bWriter.write("偶遇柱上蜗牛,");
    23         bWriter.newLine();
    24         bWriter.write("一步一步寻梦。");
    25         bWriter.newLine();
    26         bWriter.write("你我怎么可知?");
    27         bWriter.newLine();
    28         
    29         bWriter.flush();//刷新缓冲区
    30         
    31         //关闭管道
    32         bWriter.close();
    33         writer.close();
    34         
    35         System.out.println("写入成功");
    36     }
    37 }

     利用BufferedReader输出以上文件里的诗。

     1 import java.io.BufferedReader;
     2 import java.io.File;
     3 import java.io.FileNotFoundException;
     4 import java.io.FileReader;
     5 import java.io.IOException;
     6 
     7 public class Test3 {
     8     public static void main(String[] args) throws IOException, FileNotFoundException{
     9         File file = new File("D:"+File.separator+"javatest"+File.separator+"c.txt");
    10         //1创建通道
    11         FileReader reader = new FileReader(file);
    12         BufferedReader bReader = new BufferedReader(reader);
    13         
    14         //读取行
    15         String line;
    16         while ((line=bReader.readLine()) != null) {
    17             System.out.println(line);
    18             
    19         }
    20         
    21         bReader.close();
    22     }
    23 
    24 }
  • 相关阅读:
    Post请求的两种编码格式:application/x-www-form-urlencoded和multipart/form-data传参方式
    工作中常用的JavaScript函数片段
    解决导入导出Excel表格文字乱码问题
    清空antd-design时间选择组件 RangePicker的值
    react.js Hooks路由跳转
    linux跳板机服务器搭建
    docker及docker-compose学习
    Android Jenkins+Git+Gradle持续集成
    Windows Server 2008 R2常规安全设置及基本安全策略
    ubuntu lnmp安装及php扩展
  • 原文地址:https://www.cnblogs.com/abcdjava/p/10822291.html
Copyright © 2011-2022 走看看