当前位置: 首页 > web >正文

JavaEE 初阶第十七期:文件 IO 的 “管道艺术”(下)

专栏:JavaEE初阶起飞计划

个人主页:手握风云

目录

一、Java文件内容写入

1.1. OutputStream

二、字符流读取和写入

2.1. Reader

2.2. Writer

三、示例练习

3.1. 查找文件功能


一、Java文件内容写入

1.1. OutputStream

        OutputStream同样只是⼀个抽象类,要使用还需要具体的实现类。我们现在还是只关⼼写入文件中,所以使用FileOutputStream。int参数类型是写入要给字节的数据;byte[]参数类将b这个字符数组中的数据全部写⼊os中。

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Demo1 {public static void main(String[] args) {try (OutputStream outputStream = new FileOutputStream("./test.txt")) {// “你好”的字符编码outputStream.write(0xe4);outputStream.write(0xbd);outputStream.write(0xa0);outputStream.write(0xe5);outputStream.write(0xa5);outputStream.write(0xbd);} catch (IOException e) {e.printStackTrace();}}
}

        但上面写的代码,每次打开文件,都会清空原有的内容,我们可以在write方法后面加一个参数append,就能从文件末尾追加内容。

二、字符流读取和写入

2.1. Reader

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class Demo3 {public static void main(String[] args) {try (Reader reader = new FileReader("./test.txt")) {while (true) {int ch = reader.read();if (ch == -1) {break;}char c = (char) ch;System.out.println(c);}} catch (IOException e) {e.printStackTrace();}}
}

        我们同样也可以使用字符数组来进行读取。

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class Demo3 {public static void main(String[] args) {try (Reader reader = new FileReader("./test.txt")) {while (true) {char[] chars = new char[1024];int c = reader.read(chars);if (c == -1) {break;}for (int i = 0; i < c; i++) {System.out.println(chars[i]);}}} catch (IOException e) {e.printStackTrace();}}
}

2.2. Writer

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class Demo4 {public static void main(String[] args) {try (Writer writer = new FileWriter("./test.txt")) {writer.write("你好世界");} catch (IOException e) {e.printStackTrace();}}
}

三、示例练习

3.1. 查找文件功能

        扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问⽤户是否要删除该文件。

import java.io.File;
import java.util.Scanner;public class Demo5 {public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("请输入要搜索的目录:");String dir = in.nextLine();System.out.println("请输入要查询的文件名:");String filename = in.nextLine();// 判断目录是否存在File rootFile = new File(dir);if (!rootFile.isDirectory()) {System.out.println("目录不存在!");return;}// 利用递归进行搜索searchFile(rootFile, filename);}private static void searchFile(File rootFile, String filename) {// 列出rootFile中的内容File[] files = rootFile.listFiles();if (files == null) {// 空目录return;}// 遍历files数组,判断元素类型for (File file : files) {if (file.isDirectory()) {searchFile(file, filename);} else if (file.isFile()) {if (file.getName().contains(filename)) {tryDel(file);}}}}private static void tryDel(File file) {System.out.println("准备删除文件:" + file.getAbsolutePath());Scanner in = new Scanner(System.in);System.out.println("是否确认删除?(Y/N)");String choice = in.nextLine();if (choice.equalsIgnoreCase("Y")) {file.delete();System.out.println("删除成功");} }
}
http://www.xdnf.cn/news/17681.html

相关文章:

  • 《范仲淹传》读书笔记与摘要
  • 使用frp内网穿透实现远程办公
  • 基于AI量化模型的比特币周期重构:传统四年规律是否被算法因子打破?
  • Python(9)-- 异常模块与包
  • AI Coding 概述及学习路线图
  • Elasticsearch Node.js 客户端的安装
  • 【功能测试】软件集成测试思路策略与经验总结
  • FFmpeg - 基本 API大全(视频编解码相关的)
  • 【数据结构】深入理解顺序表与通讯录项目的实现
  • leetcode-hot-100 (图论)
  • CobaltStrike的搭建和使用
  • 爬虫与数据分析实战
  • 【09-神经网络介绍2】
  • 一文读懂 C# 中的 Lazy<T>
  • 第10节 大模型分布式推理典型场景实战与架构设计
  • Godot ------ 平滑拖动02
  • Apache Ignite 核心组件:GridClosureProcessor解析
  • C# 异步编程(计时器)
  • Python: configparser库 ini文件操作库
  • 使用MAS(Microsoft Activation Scripts)永久获得win10专业版和office全套
  • Edit Distance
  • react中父子数据流动和事件互相调用(和vue做比较)
  • GO学习记录三
  • 基于MongoDB/HBase的知识共享平台的设计与实现
  • 【Dv3Admin】菜单转换选项卡平铺到页面
  • Excel 连接阿里云 RDS MySQL
  • 5G 非地面网络(NTN)最专业的方案
  • 高并发场景下分布式ID生成方案对比与实践指南
  • 在 .NET Core 5.0 中启用 Gzip 压缩
  • 从ELF到进程间通信:剖析Linux程序的加载与交互机制