Java 超详细讲解IO操作字节流与字符流

作者:桃花键神 时间:2022-04-28 20:09:57 

IO操作

Java 超详细讲解IO操作字节流与字符流

字节流

  • java.io.InputStream 输入流,主要是用来读取文件内容的。

  • java.io.OutputStream 输出流,主要是用来将内容字节写入文件的。

FileInputStream

该流用于从文件读取数据,它的对象可以用关键字 new 来创建。

有多种构造方法可用来创建对象。

可以使用字符串类型的文件名来创建一个输入流对象来读取文件


InputStream f = new FileInputStream("D:/hello");

也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:


File f = new File("D:/hello");
InputStream in = new FileInputStream(f);

FileOutputStream

该类用来创建一个文件并向文件中写数据。

如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。

有两个构造方法可以用来创建 FileOutputStream 对象。

使用字符串类型的文件名来创建一个输出流对象:


OutputStream f = new FileOutputStream("D:/hello");

也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:


File f = new File("D:/hello");
OutputStream fOut = new FileOutputStream(f);

字节流读写案例

读取D:/hello.txt文件中的内容再输入到文件D:/test.txt中


     public class Mk {
       public static void main(String[] args) throws IOException {
           File file=new File("D://hello.txt");
           File file1= new File("D://test.txt");
           InputStream is=new FileInputStream(file);
           OutputStream out=new FileOutputStream(file1);
           //定义byte数组用来暂存数据
           byte[] buf = new byte[1024];
           //读取Is中的内容存到buf
           is.read(buf);
           //将buf中的内容写入out
           out.write(buf);
           is.close();
           out.close();
       }
       }

字符流

FileReader

写入文件实例


public class A {
   public static void main(String[] args) throws IOException {
       FileWriter fw = new FileWriter("user.txt", true);
       fw.write("你好中国1");
       fw.write("你好中国2");
       fw.write("你好中国3");
       fw.close();
   }
}

Java 超详细讲解IO操作字节流与字符流

Java 超详细讲解IO操作字节流与字符流

FileWriter

读取文件实例

这里我把内容换行了

Java 超详细讲解IO操作字节流与字符流

br.ready()是判断这一行流是否为空

br.readLine()是输出一行,然后自动光标指到下一行。


public class A {
   public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new FileReader("user.txt"));
       while (br.ready()) {
           System.out.println(br.readLine());
       }
       br.close();
   }
}

Java 超详细讲解IO操作字节流与字符流

字节流与字符流的区别

字节流和字符流使用是非常相似的,那么除了操作代码的不同之外,还有哪些不同呢?

字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的 字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容

那开发中究竟用字节流好还是用字符流好呢?

在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。 如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),并且采用边读边写的方式(节省内存)。

来源:https://jianshen.blog.csdn.net/article/details/123617806

标签:Java,IO操作,字节流,字符流
0
投稿

猜你喜欢

  • Mybatis逆向工程运行代码实例

    2021-06-22 04:54:59
  • IDEA2020.1常用配置说明

    2023-01-09 02:11:50
  • java 安全 ysoserial CommonsCollections6 分析

    2021-06-04 01:58:14
  • Java实现布隆过滤器的方法步骤

    2023-02-15 20:31:47
  • Mybatis插件之自动生成不使用默认的驼峰式操作

    2023-11-19 01:20:03
  • Java内存模型(JMM)及happens-before原理

    2023-11-25 00:41:05
  • 利用java制作简单的音乐播放器

    2022-01-21 11:39:32
  • Spring Boot 2结合Spring security + JWT实现微信小程序登录

    2022-07-14 08:25:54
  • Java面试题-实现复杂链表的复制代码分享

    2023-11-23 20:05:39
  • springboot整合shiro与自定义过滤器的全过程

    2023-11-24 21:02:40
  • Java核心编程之文件随机读写类RandomAccessFile详解

    2023-11-28 17:40:05
  • Struts 2中实现Ajax的三种方式

    2022-04-30 05:46:28
  • C#实现将Email地址转成图片显示的方法

    2022-09-26 09:35:36
  • C# 设计模式系列教程-外观模式

    2023-01-08 18:44:40
  • JDBC连接MySQL并实现模糊查询

    2021-07-06 01:42:28
  • springboot2.x整合tkmapper的示例代码

    2021-09-19 11:56:59
  • Java使用通配符实现增强泛型详解

    2021-07-06 17:28:01
  • Java结构型设计模式中建造者模式示例详解

    2023-04-24 13:37:31
  • Spring的自动装配Bean的三种方式

    2023-08-24 23:05:15
  • 在SpringBoot中整合使用Netty框架的详细教程

    2023-03-26 23:59:53
  • asp之家 软件编程 m.aspxhome.com