Java培训笔记 05-文件处理文件和I/O

Java 7 引入了全新的I/O API(一般称为NIO.2),在java.nio.file 包中。
新API 分为两大部分:

  • 新抽象的Path 接口(这个接口的作用可以理解为表示文件的位置,这个位置可以有内容,也可以没有)
  • Files 类的静态方法,可用于处理文件和文件系统。

对文件的操作要用try catch包裹起来

Reader和Writer 类处理的是字符流,InputStream 和OutputStream 及其子类提供的是低层字节流。InputStream 和OutputStream是二进制格式操作,抽象类,基于字节的输入操作
I/O流的核心是一对抽象类,InputStream 和OutputStream。这两个类使用广泛,“标准”输入和输出流(System.in 和System.out)就是这种流。标准输入和输出流是
System 类的公开静态字段。
一个字符占用两个字节。
在这里插入图片描述

  • 按方向分类:输入流和输出流
  • 按处理单元分:字节流和字符流
  • 按功能分:节点流和处理流(处理流不能单独存在,需要包装在其他流上面)

Reader和Writer类

Reader和Writer类架构在字节流相关的类上,无需再处理底层I/O流。这两个类的子类有:

  • FileReader
  • BufferedReader
  • InputStreamReader:如果想从终端读取行,而不是文件,一般会在 System.in 对象上使用 InputStreamReader 对象。
  • FileWriter
  • PrintWriter
  • BufferedWriter:如果同时使用FileWriter和BufferWriter,那么性能会大大提高,而单独使用操作字符,每写一次数据,磁盘就有一个写操作,性能很差。因为如果加了缓冲,那么会等到缓冲满了以后才会有写操作,效率和性能都有很大提高。

TWR

“处理资源的 try 语句”(try-withresources,TWR),可以实现资源的自动释放,是一种正确终结方式。实现 TWR 的关键是一个新接口——AutoCloseable。这个新接口(在 Java 7 中出现)是 Closeable 的直接超接口,表示资源必须自动关闭。为此,编译器会插入特殊的异常处理 代码。

Path 接口

可用于在文件系统中定位文件。这个接口表示的路径具有下述特性:
• 系统相关
• 有层次结构
• 由一系列路径元素组成
• 假设的(可能还不存在,或者已经删除)
Path 对象和 File 对象完全不同。其中特别重要的一点是,Path 是接口,而不是类, 这体现了系统相关性。因此,不同的文件系统提供方可以使用不同的方式实现 Path 接口。
有了 Path 类中的 toFile() 方法和 File 类中的 toPath() 方法,开发者可以毫不费力地在两个 API 之间切换, 而且可以使用一种直观的方式重构使用 File 类的代码,换用 Path 接口。

对文件操作的步骤

  • 创建一个Path 对象,对应于一个新文件;
  • 使用Files 类创建那个新文件;
  • 创建一个Writer 对象,打开那个文件;
  • 把内容写入那个文件;
  • 写入完毕后自动关闭那个文件。

ByteBuffer对象

是一个字节序列,这种方式叫作“直接缓冲区”,只要可能就会绕过 Java 堆内存。直接缓冲区在本地内存中 分配,而不是在标准的 Java 堆内存中。有三种创建方式:

  • 调用工厂方法 allocateDirect()。
  • allocate() 方法,用于创建堆中缓冲区
  • 打包现有的 byte[] 数组。这种方式创建的是堆中缓冲区, 目的是以更符合面向对象的方式处理底层字节。

把数据存入缓冲区或从缓冲区中取出有两种操作方式:一种是单值操作,一次读写一个 值;另一种是批量操作,一次读写一个 byte[] 数组或 ByteBuffer 对象,处理多个值(可 能很多)。使用批量操作才能获得预期的性能提升

equalsIgnoreCase() 方法

用于将字符串与指定的对象比较,不考虑大小写。
语法:public boolean equalsIgnoreCase(String anotherString)

String[] input = {"tiger","cat","TIGER","Tiger","leopard"};
		List<String> cats = Arrays.asList(input);
		String search = "tiger";
		String tigers = cats.stream()
				.filter(s -> s.equalsIgnoreCase(search))
				.collect(Collectors.joining(","));
		System.out.println(tigers);

输出
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值