Java文件读写数据流
创始人
2024-01-29 08:37:04
0

1.按照读写方式来分

以下这几个类都是抽象类.并且都有对于文件操作的具体实现类.File+类名就是具体的实现类

1.1.二进制方式读写

1.1.1.InputStream

以二进制方式读.有两个主要方法.

1.read();

该方法有三个版本

  1. 无参: read() 读取一个字节的数据,返回 -1 表示读取结束
  2. 一个参数: read(byte[] b) 最多读取 b.length 字节的数据到 b 中,返回值是实际读到的数量;返回 -1 表示读取结束.读取到的内容会存储在传入的数组参数中.
  3. 三个参数: read(byte[] b, int off, int len) 最多读取 (len-off)个字节的数据到 b 中,放在byte数组中,从 off 开始,返回实际读到的数量;返回 -1 表示读取结束.读取到的内容会存储在传入的数组参数中.

2.close();

关闭字节流.Java的数据流在使用结束时都需要手动关闭字节流.否则长时间未关闭会产生内存泄漏的危险.

1.1.2.OutputStream

以二进制方式写.有三个主要方法.默认此操作每次都会清空旧的内容.向内部写入新的内容.如果需要追加需要添加参数,

1.write();

该方法同样有三个版本

  1. 一个int型的参数: write(int b) 写入一个字节
  2. 一个字节数组的参数: write(byte[] b) 将 b 这个字符数组中的数据全部写入 os 中
  3. 三个参数: write(byte[] b, int off, int len) 将 b 这个字符数组中从 off 开始写入 len 个长度的数据

2.close();

与InputStream流相同,使用结束需要关闭流.否则会产生危险.

3.flash();

清空缓存区.

因为I/O 的速度是很慢的,所以大多的 OutputStream 为了减少设备操作的次数,就先将I/O内容先写到一片内存中(缓冲区).等到缓冲区满了,或者达成一定条件时才真正将数据写入设备中.

这样的操作提升了一定的效率,但造成一个后果.就是我们写的数据,很可能会遗留一部分在缓冲区中.所以我们就需要这样一个操作.在合适的时候,让缓冲区中的内容全部写入设备(清空缓冲区).

1.2.字符方式读写

用法和以字节读写类似,不同的是操作对象: 一个操作字节,一个操作字符.

1.2.1.Reader

以字符方式读.与InputStream类似.有 read()和close() 方法.并且用法也类似.

1.read();

该方法有三个版本

  1. 无参: read()
  2. 一个参数: read(char[] b)
  3. 三个参数: read(char[] b, int off, int len)

2.close();

关闭字符流.

1.2.2.Writer

以字符方式写.与OutputStream类似.有 write(),close()和flash() 方法.并且用法也类似.

1.write();

该方法同样有三个版本

  1. 一个int型的参数: write(int b)
  2. 一个字符数组的参数: write(char[] b)
  3. 三个参数: write(char[] b, int off, int len)

2.close();

关闭字符流.

3.flash();

清空缓存区.

2.具体的实现类

  1. FileInputStream
  2. FileOutputStream
  3. FIleReader
  4. FileWriter

2.1构造方法

这几个实现类的构造方法类似.这里以FileInputStream为例.

  1. FileInputStream(File file) : 利用 File 构造文件输入流
  2. FileInputStream(String name) : 利用文件路径构造文件输入流

需要注意的是,这几个写入流都是清空原有文件数据,重新写入新的数据.如果想要追加数据的话.需要在构造方法参数后面添加true.

FileOutputStream(String name,boolean bo);这里的第二个参数为true时就是向文件中追加内容.

3.复制文件案例

import java.io.*;
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入要拷贝的源路径");String src = scanner.next();System.out.println("请输入要拷贝的目标路径");String dest = scanner.next();File srcFile = new File(src);if (!srcFile.isFile()) {System.out.println("输入源路径有误");return;}try (InputStream inputStream = new FileInputStream(src)) {try (OutputStream outputStream = new FileOutputStream(dest)) {byte[] buffer = new byte[1024];while (true) {int len = inputStream.read(buffer);if (len == -1) {break;}outputStream.write(buffer, 0, len);}}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...