(每日持续更新)jdk api之FileInputStream基础、应用、实战

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。

以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】

一、java.io

1.20 FileInputStream

FileInputStream 是 Java I/O 包中用于从文件中读取数据的类。以下是关于 FileInputStream 的主要信息:

FileInputStream 介绍:
  • 包路径: java.io

  • 继承关系: FileInputStreamInputStream 的子类,继承了其所有方法。

FileInputStream 所有字段:

FileInputStream 类没有定义自己的字段。

FileInputStream 构造方法:
  • FileInputStream(String name) 创建一个文件输入流,以读取指定名称的文件。

  • FileInputStream(File file) 创建一个文件输入流,以读取指定的 File 对象表示的文件。

  • FileInputStream(FileDescriptor fdObj) 创建一个文件输入流,以读取指定的文件描述符表示的文件。

FileInputStream 方法摘要:

以下是一些常用的方法,完整的方法列表可以参考官方文档。

  • int read() 从输入流中读取数据的下一个字节。

  • int read(byte[] b) 从输入流中读取一些字节数,并将它们存储到字节数组 b 中。

  • int read(byte[] b, int off, int len) 从输入流中最多读取 len 个字节的数据到字节数组 b 中,从偏移量 off 处开始存储。

  • long skip(long n) 跳过和丢弃输入流中数据的 n 个字节。

  • int available() 返回剩余的可以读取的字节数。

  • void close() 关闭输入流并释放与该流关联的所有系统资源。

简单使用例子:

以下是一个简单的使用 FileInputStream 读取文件内容的例子:

javaCopy code
import java.io.FileInputStream;
import java.io.IOException;
​
public class FileInputStreamExample {
​public static void main(String[] args) {String filePath = "example.txt";
​try (FileInputStream fis = new FileInputStream(filePath)) {int data;while ((data = fis.read()) != -1) {// 处理读取到的字节数据,这里简单打印字符System.out.print((char) data);}} catch (IOException e) {e.printStackTrace();}}
}

在这个例子中,我们使用 FileInputStream 打开一个文件,并通过 read() 方法逐字节读取文件内容。读取的字节数据可以根据需要进行处理,这里简单地将其强制转换为字符并打印出来。使用 try-with-resources 语句确保在读取完成后自动关闭文件输入流。

应用场景
介绍

FileInputStream 主要用于从文件中读取数据,因此适用于许多场景,其中一些包括:

  1. 文件内容读取:

    • 最常见的用途是从文件中读取内容。可以使用 FileInputStream 逐字节或逐块读取文件数据。

  2. 文件复制:

    • 用于实现文件复制操作,通过 FileInputStream 读取源文件的内容,然后使用 FileOutputStream 将内容写入目标文件。

  3. 文本文件解析:

    • 在文本文件中读取数据,例如配置文件、日志文件或其他文本格式的数据文件。可以使用 FileInputStreamBufferedReader 一起读取文件的文本内容。

  4. 字节流处理:

    • 用于处理二进制文件,如图像、音频或视频文件。可以使用 FileInputStream 读取字节数据,并根据需要进行进一步处理。

  5. 网络编程:

    • 在网络编程中,FileInputStream 可用于读取从网络连接接收的数据。例如,接收到的数据可能需要保存到文件中。

  6. 数据验证:

    • 在某些情况下,可能需要验证文件的特定部分或完整性。通过使用 FileInputStream 读取文件内容,可以进行验证操作。

  7. 资源加载:

    • 在某些应用程序中,可能需要加载外部资源,如配置文件或用户数据文件。FileInputStream 可用于加载这些资源的内容。

  8. 日志文件分析:

    • 用于分析日志文件,从中提取信息以进行报告、监控或其他分析。可以使用 FileInputStream 读取日志文件中的数据。

  9. 缓存和数据处理:

    • 用于将文件内容读取到内存中进行缓存或进一步处理。例如,读取图像文件以进行图像处理。

  10. 安全性检查:

  • 用于执行文件的安全性检查,检查文件的内容以确保符合特定的安全标准。

这些只是 FileInputStream 的一些常见应用场景,实际上,它可以用于许多需要从文件中读取数据的情况。要注意,在读取大文件时,最好结合使用缓冲流(BufferedInputStream)以提高性能。

代码及实现

FileInputStream 主要用于从文件中读取数据,以下是几种应用场景及相应的简单代码实现事项:

  1. 文件内容读取和处理:

  • 应用场景: 读取文件内容,并对每个字节进行处理。

  • 代码实现:

    javaCopy code
    try (FileInputStream fis = new FileInputStream("example.txt")) {int data;while ((data = fis.read()) != -1) {// 处理每个字节的逻辑}
    } catch (IOException e) {e.printStackTrace();
    }
  • 事项: 需要注意处理每个字节的逻辑,例如打印到控制台或存储到数据结构中。

  1. 文本文件解析和处理:

  • 应用场景: 从文本文件中读取数据,并进行解析和处理。

  • 代码实现:

    javaCopy code
    try (FileInputStream fis = new FileInputStream("data.txt");InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8);BufferedReader reader = new BufferedReader(isr)) {
    ​String line;while ((line = reader.readLine()) != null) {// 处理每行文本的逻辑}
    } catch (IOException e) {e.printStackTrace();
    }
  • 事项: 使用字符流 (InputStreamReaderBufferedReader) 进行文本解析,以便处理字符串而不是字节。

  1. 文件复制:

  • 应用场景: 复制一个文件到另一个文件。

  • 代码实现:

    javaCopy code
    try (FileInputStream sourceStream = new FileInputStream("source.txt");FileOutputStream targetStream = new FileOutputStream("target.txt")) {
    ​byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = sourceStream.read(buffer)) != -1) {targetStream.write(buffer, 0, bytesRead);}
    } catch (IOException e) {e.printStackTrace();
    }
  • 事项: 使用缓冲区(byte[] buffer)以提高文件复制的效率。

  1. 网络编程:

  • 应用场景: 从网络连接中读取数据。

  • 代码实现:

    javaCopy code
    try (Socket socket = new Socket("example.com", 8080);InputStream inputStream = socket.getInputStream()) {
    ​int data;while ((data = inputStream.read()) != -1) {// 处理从网络接收的字节数据}
    } catch (IOException e) {e.printStackTrace();
    }
  • 事项: 需要适应网络编程的异常处理和连接管理。

  1. 资源加载:

  • 应用场景: 从文件系统加载资源文件到应用程序。

  • 代码实现:

    javaCopy code
    try (FileInputStream fis = new FileInputStream("resource.txt")) {// 读取资源文件的逻辑
    } catch (IOException e) {e.printStackTrace();
    }
  • 事项: 资源文件可以是配置文件、模板文件或其他应用程序所需的数据。

这些场景提供了一些基本的用例,实际应用中可能涉及更复杂的业务逻辑和异常处理。在所有情况下,都需要适当地关闭流以释放资源,并注意处理可能的异常情况。

实战例子

让我们考虑一个简单的项目实战例子:一个文本文件搜索工具。该工具允许用户输入一个目录路径和一个关键词,然后搜索该目录下的所有文本文件,找到包含关键词的行,并输出匹配的行以及所在文件的信息。

以下是一个简化版本的项目实战代码:

javaCopy code
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
​
public class TextFileSearchTool {
​public static void main(String[] args) {Scanner scanner = new Scanner(System.in);
​// 获取用户输入的目录路径和关键词System.out.print("Enter the directory path to search: ");String directoryPath = scanner.nextLine();
​System.out.print("Enter the keyword to search: ");String keyword = scanner.nextLine();
​// 搜索并输出匹配的行和文件信息searchAndPrintMatches(directoryPath, keyword);}
​private static void searchAndPrintMatches(String directoryPath, String keyword) {File directory = new File(directoryPath);
​// 遍历目录下的所有文本文件List<File> textFiles = listTextFiles(directory);
​for (File textFile : textFiles) {// 搜索文件中包含关键词的行List<String> matchingLines = searchKeywordInFile(textFile, keyword);
​// 输出匹配的行和文件信息if (!matchingLines.isEmpty()) {System.out.println("Matches found in file: " + textFile.getName());for (String line : matchingLines) {System.out.println(line);}System.out.println();}}}
​private static List<File> listTextFiles(File directory) {List<File> textFiles = new ArrayList<>();
​if (directory.isDirectory()) {File[] files = directory.listFiles();if (files != null) {for (File file : files) {if (file.isFile() && file.getName().toLowerCase().endsWith(".txt")) {textFiles.add(file);}}}}
​return textFiles;}
​private static List<String> searchKeywordInFile(File file, String keyword) {List<String> matchingLines = new ArrayList<>();
​try (FileInputStream fis = new FileInputStream(file);InputStreamReader isr = new InputStreamReader(fis);BufferedReader reader = new BufferedReader(isr)) {
​String line;int lineNumber = 1;while ((line = reader.readLine()) != null) {if (line.toLowerCase().contains(keyword.toLowerCase())) {matchingLines.add("Line " + lineNumber + ": " + line);}lineNumber++;}
​} catch (IOException e) {e.printStackTrace();}
​return matchingLines;}
}

这个例子中,我们实现了一个简单的文本文件搜索工具。用户可以输入要搜索的目录路径和关键词。工具会遍历指定目录下的所有文本文件,搜索包含关键词的行,并输出匹配的行以及所在文件的信息。在实际应用中,可能需要添加更多的功能和改进,比如支持不同文件类型、多线程搜索等。这个例子提供了一个基本框架,你可以根据具体需求进行扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/623467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将PDF发票转换为excel、xml结构化数据的完美解决方案

随着电子发票的普及&#xff0c;越来越多的企业和个人开始使用PDF格式的电子发票。然而&#xff0c;有时我们需要将电子发票转换为XML格式以便于处理和分析。本文将介绍如何将收到的PDF发票下载为excel、xml文件。首先&#xff0c;我们需要明确一点&#xff0c;PDF是一种基于图…

1. FPGA概述

文章目录 1. 什么是FPGA2. 学习FPGA有什么用3. 学习FPGA需要何种先决条件 1. 什么是FPGA 这个问题太low了&#xff0c;身处数字时代&#xff0c;从事电子信息行业&#xff0c;居然不知道FPGA&#xff1f;岂非笑谈&#xff1f; 介绍FPGA的资料太多了&#xff0c;还是从它的字面…

Could NOT find Threads (missing: Threads_FOUND)

具体错误 -- Performing Test CMAKE_HAVE_LIBC_PTHREAD -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed -- Looking for pthread_create in pthreads -- Looking for pthread_create in pthreads - not found -- Looking for pthread_create in pthread -- Looking for…

C#编程-属性和反射

属性和反射 属性是将元数据信息和行为添加到应用程序代码中的简单技术。属性是允许您将声明信息添加到程序的元素。此声明信息在运行时用途广泛,可使用应用程序开发工具在设计时使用。 介绍属性 对象是由其属性值描述的。例如,汽车可以使用它的构造、型号或颜色来描述。类似…

ART-Adversarial Robustness Toolbox检测AI模型及对抗攻击的工具

一、工具简介 Adversarial Robustness Toolbox 是 IBM 研究团队开源的用于检测模型及对抗攻击的工具箱&#xff0c;为开发人员加强 AI模型被误导的防御性&#xff0c;让 AI 系统变得更加安全&#xff0c;ART支持所有流行的机器学习框架 &#xff08;TensorFlow&#xff0c;Ker…

SpringMVC RESTful案例

文章目录 1、准备工作2、功能清单3、具体功能&#xff1a;访问首页a>配置view-controllerb>创建页面 4、具体功能&#xff1a;查询所有员工数据a>控制器方法b>创建employee_list.html 5、具体功能&#xff1a;删除a>创建处理delete请求方式的表单b>删除超链接…

Web3社交治理:用户参与决策的新模式

Web3时代的到来不仅仅带来了区块链技术的创新&#xff0c;还为社交治理带来了全新的模式。传统社交平台上的决策权通常集中在平台的运营方&#xff0c;而Web3社交治理的兴起意味着用户能够更直接地参与到社交平台的决策过程中。本文将深入探讨Web3社交治理的背景、工作原理以及…

帆软笔记-决策表报对象使用(两表格联动)

效果描述如下&#xff1a; 数据库中有个聚合商表&#xff0c;和一个储能表&#xff0c;储能属于聚合商&#xff0c;桩表中有个字段是所属聚合商。 要求帆软有2个表格&#xff0c;点击某个聚合商&#xff0c;展示指定的储能数据。 操作&#xff1a; 帆软选中表格单元&#xf…

C语言实现动态数组

1.mj版本的动态数组 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define DEFAULT_CAPACITY 10 #define ELEMENT_NOT_FOUND -1 // 定义全局变量 // 数组元素个数 int size 0; // 初始化动态数组 int* initArray(int capacity) {// 如果…

es5和es6的区别

ES5 和 ES6 的区别 ECMAScript5&#xff0c;即 ES5&#xff0c;是 ECMAScript 的第五次修订&#xff0c;于 2009 年完成标准化 ECMAScript6&#xff0c;即 ES6&#xff0c;是 ECMAScript 的第六次修订&#xff0c;于 2015 年完成&#xff0c;也称 ES2015 ES6 是继 ES5 之后的一…

SpringBoot 入门教程

1.复习SSM项目中&#xff0c;用spring&#xff0c;mybatis,springmvc这三个框架整合的项目。 SSM项目的所有类&#xff0c;这是用SSM整合一个搜索书籍种类和呈现的前端和后端的ssm的小项目。 2.springboot如何去开发这个页面&#xff1a; 新建springboot项目&#xff0c;勾选对…

<软考高项备考>《论文专题 - 68 质量管理(7) 》

7 管理关系论文解析 7.1 项目质量与进度、成本、范围之间的密切关系。&#xff08;2018年上&#xff09; 在项目管理三角形中&#xff0c;质量位于进度&#xff0c;成本&#xff0c;范围的中间的位置。 规划质量管理的输入中有需求文件&#xff0c;也就是说先有范围有需求的基…

MeshLab生成分形地形

文章目录 分型地形脊状多重分形其他地形 分型地形 分形地形是一种较为复杂的几何对象&#xff0c;MeshLab提供了下列五种地形生成算法&#xff0c;并且贴心地给出了每种算法相对较好的参数。 算法SeedOctaves缺项性分形增量偏移增益fBM(fractal Brownian Motion)11021.2--Sta…

【WPF.NET开发】WPF中的版式

本文内容 改进的文本质量和性能丰富的版式增强的国际文本支持增强的字体支持新的文本应用程序编程接口 (API) 本主题介绍 WPF 的主要版式功能。 这些功能包括改进的文本呈现质量和性能、OpenType 版式支持、增强的国际文本、增强的字体支持和新的文本应用程序编程接口 (API)。…

VUE好看的个人博客源码

文章目录 1.设计来源1.1 首页界面1.2 我的日记界面1.3 我的文章界面1.3.1 文章列表1.3.2 文章时间轴1.3.3 文章详细 1.4 我的相册界面1.5 我的源码界面1.6 认识我界面 2.效果和源码2.1 动态效果2.2 源码目录结构 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https:/…

从头安装与使用一个docker GPU环境

GPU版docker的安装与使用 欢迎使用GPU版docker安装使用说明使用官方教程安装docker新建一个GPU版docker环境调用docker环境执行本地python文件 欢迎使用GPU版docker安装使用说明 使用官方教程安装docker 导入源仓库的GPG key curl -fsSL https://download.docker.com/linux/…

【计算机组成原理】期末复习试卷

目录 第一套试卷 第一套答案 第二套试卷 第二套答案 第三套试卷 第四套试卷 剩余试卷下载 第一套试卷 一、选择题&#xff08;共20分&#xff0c;每题1分&#xff09; 1&#xff0e;冯诺伊曼机工作方式的基本特点是______。 A&#xff0e;多指令流单数据流&#xff1b; B&#…

C++八股2

虚拟内存 虚拟内存是计算机系统内存管理的一种技术&#xff0c;它为每个进程提供一个独立的、连续的地址空间&#xff0c;即使物理内存有限或不连续。在C编程中&#xff0c;操作系统通过页表将虚拟地址映射到物理内存地址上。当程序试图访问不在物理内存中的虚拟地址时&#xf…

03MARL-联合策略与期望回报

文章目录 前言一、MARL问题组成二、联合策略与期望回报1.History-based expected return2.Recursive expected return 前言 多智能体强化学习问题中的博弈论知识——联合策略与期望回报 一、MARL问题组成 二、联合策略与期望回报 定义一种普遍的期望回报&#xff0c;能够用于…

任务8:安装大数据统计分析工具Hive

任务描述 知识点&#xff1a;Hive安装应用 重 点&#xff1a; 基于CentOS系统&#xff0c;安装配置Hive创建访问Hive数据库的用户&#xff0c;并授予访问权限 内 容&#xff1a; 安装Hive配置MySQL、设置远程访问权限配置HiveHive服务端、客户端访问 任务指导 1. Hive…