File和InputStream,OutputStream

目录

认识⽂件

树型结构组织 和 ⽬录

⽂件路径(Path)

文件的种类

File类

属性

构造方法

方法

代码示例

文件内容的读写——数据流

java中提供了一组类表示流

1.字节流

2.字符流

InputStream概述

方法

说明

FileInputStream概述

构造方法

OutputStream概述

方法

说明


认识⽂件
我们先来认识狭义上的⽂件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进⾏数据保存时, 往往不是保存成⼀个整体,⽽是独⽴成⼀个个的单位进⾏保存,这个独⽴的单位就被抽象成⽂件的概 念,就类似办公桌上的⼀份份真实的⽂件⼀般。

狭义的文件=》保持在硬盘上的文件

广义的文件=》操作系统进行资源管理的一种机制,很多软件/硬件资源抽象成”文件来表示


通俗的说文件夹是文件,专业上来说是目录

树型结构组织 和 ⽬录
同时,随着⽂件越来越多,对⽂件的系统管理也被提上了⽇程,如何进⾏⽂件的组织呢,⼀种合乎⾃ 然的想法出现了,就是按照层级结构进⾏组织⸺也就是我们数据结构中学习过的树形结构。这样, ⼀种专⻔⽤来存放管理信息的特殊⽂件诞⽣了,也就是我们平时所谓⽂件夹(folder)或者⽬录
(directory)的概念。
计算机中目录套目录构成了树形结构

从树根开始到最终的文件中间需要经过哪些目录,把这些目录记录下来就构成“路径”

一般使用/来分割路径中的多级目录

⽂件路径(Path)
如何在⽂件系统中如何定位我们的⼀个唯⼀的⽂件就成为当前要解决的问题,但这难不倒计算机科学 家,因为从树型结构的⻆度来看,树中的每个结点都可以被⼀条从根开始,⼀直到达的结点的路径所 描述,⽽这种描述⽅式就被称为⽂件的绝对路径(absolute path)
除了可以从根开始进⾏路径的描述,我们可以从任意结点出发,进⾏路径的描述,⽽这种描述⽅式就 被称为相对路径(relative path),相对于当前所在结点的⼀条路径
相对路径需要明确一个基准路径
1.在idea中直接运行,基准路径就是项目路径
2.打一个jar包,单独运行jar包
当前在哪个目录下执行运行命令
基准目录就是哪个目录

文件的种类

从 开发角度把文件分成两类

1.文本文件

2.二进制文件

即使是普通⽂件,根据其保存数据的不同,也经常被分为不同的类型,我们⼀般简单的划分为⽂本⽂ 件和⼆进制⽂件,分别指代保存被字符集编码的⽂本和按照标准格式保存的⾮被字符集编码过的⽂ 件

最后,很多操作系统为了实现接⼝的统⼀性,将所有的 I/O 设备都抽象成了⽂件的概念,使⽤这⼀理念 最为知名的就是 Unix、Linux 操作系统⸺万物皆⽂件。

Java标准库提供了一系列的类操作文件

1.文件系统操作

创建文件,删除文件,重命名,创建目录

2.文件内容操作

针对一个文件的内容进行读和写


File类

File用于操作文件系统

属性

构造方法

参数String文件的路径使用绝对路径/相对路径均可

方法


代码示例
import java.io.File;
import java.io.IOException;

public class Demo1 {
    public static void main(String[] args) throws IOException {
        File file = new File("./teat.txt");
        System.out.println(file.getParent());
        System.out.println(file.getName());
        System.out.println(file.getPath());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());
    }
}
import java.io.File;
import java.io.IOException;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        File file = new File("./test.txt");
        file.createNewFile();
        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());
    }
}
import java.io.File;
import java.io.IOException;
public class Main {
   public static void main(String[] args) throws IOException {
      File file = new File("some-file.txt"); // 要求该⽂件不存在,才能看到相
      System.out.println(file.exists());
      System.out.println(file.createNewFile());
      System.out.println(file.exists());
      System.out.println(file.delete());
      System.out.println(file.exists());
   }
}
import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("some-file.txt"); // 要求 some-file.txt 得存在
        File dest = new File("dest.txt"); // 要求 dest.txt 不存在
        System.out.println(file.exists());
        System.out.println(dest.exists());
        System.out.println(file.renameTo(dest));
        System.out.println(file.exists());
        System.out.println(dest.exists());
   }
}
import java.io.File;
import java.util.Arrays;

public class Demo4 {
    public static void main(String[] args) {
        File file = new File("./");
        String[] list = file.list();
        System.out.println(Arrays.toString(list));
    }
}

文件内容的读写——数据流

java中针对文件内容的操作

主要是通过一组“流对象”来实现的

计算机中的“流”和水流非常相似

因此,计算机中针对读写文件,也是使用流(Stream)词

流是操作系统层面的术语,和语言无关

各种编程语言操作文件都叫流


java中提供了一组类表示流

分成两个大类别

1.字节流

读写文件,以字节为单位

是针对二进制文件使用的

InputStream 输入   从文件读数据

OutputStream 输出   往文件写数据

2.字符流

读写文件,以字符为单位

是针对文本文件使用的

Reader 输入   从文件读数据

Writer 输出   往文件写数据


InputStream概述
方法

说明
InputStream 只是⼀个抽象类,要使⽤还需要具体的实现类。关于 InputStream 的实现类有很多,基本可以认为不同的输⼊设备都可以对应⼀个 InputStream 类,我们现在只关⼼从⽂件中读取,所以使⽤ FileInputStream

FileInputStream概述
构造方法

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class Demo7 {
    public static void main(String[] args) throws IOException {
        //InputStream inputStream = new FileInputStream("./test.txt");
        //inputStream.close();
        try(InputStream inputStream = new FileInputStream("./test.txt")){
            while(true){
//                int data = inputStream.read();
//                if(data == -1){
//                    break;
//                }
//                System.out.println(data);
                byte[] data = new byte[1024];
                int n = inputStream.read(data);
                if(n == -1){
                    break;
                }
                for (int i = 0; i < n; i++) {
                    System.out.println(data[i]);
                }
            }
        }
    }
}

FileInputStream

1.打开  try with resource

2.读read

3.关闭 Closable


OutputStream概述
方法

说明
OutputStream 同样只是⼀个抽象类,要使⽤还需要具体的实现类。我们现在还是只关⼼写⼊⽂件
中,所以使⽤ FileOutputStream
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class Demo8 {
    public static void main(String[] args) {
        try(OutputStream outputStream = new FileOutputStream("./output.txt")){
            outputStream.write(97);
            byte[] bytes = {97,98,99};
            outputStream.write(bytes);
        }catch (IOException e){
            throw new RuntimeException(e);
        }
    }
}

对于OutputStream来说默认情况下尝试创建不存在的文件

是会清除上次的文件内容的

追加写的模式避免内容被清空


1.流对象的使用流程

先打开,再读写,最后关闭

2.应该使用哪个流对象

先区分是文本,二进制

再区分度读还是写

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker镜像仓库实战

docker镜像仓库实战 搭建一个nginx服务基础知识(Web服务器)查找nginx镜像拉取镜像启动nginx镜像 搭建一个nginx服务 基础知识(Web服务器) Web 服务器&#xff0c;一般是指“网站服务器”&#xff0c;是指驻留于互联网上某种类型计算机的程序。Web 服务器可以向 Web 浏览器等客…

[Redis] Redis主从复制模式

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

VisionPro —— CogPatInspectTool对比工具

一、CogPathInspectTool工具简介 CogPathInspectTool是VisionPro重要的工具&#xff0c;主要用于缺陷检测&#xff0c;通过将当前图像与“训练图像”对比&#xff0c;获取“原始差异图像”&#xff0c;再将“原始差异图像”与“阈值图像”进行对比&#xff0c;进而获取“阈值差…

Git 基础详解

1. 基本概念 Git是一个免费、开源的 分布式版本控制系统&#xff0c;可以高效处理小到大型的各种项目。 1.1 版本控制 版本控制&#xff1a;它是一种用于追踪和记录文件、目录、项目或软件的变化&#xff0c;以便将来查阅、比较、修订不同版本文件的系统 版本控制系统&…

博通网络交换芯片

参考视频&#xff1a;不懂网络芯片秒怂? 航家带你提逼格 | #1 博通Trident芯片系列_哔哩哔哩_bilibili

Java入门十三——继承(super)

大家好&#xff0c;今天怒更两篇hhhhh&#xff0c;干货满满&#xff01; 一、继承 今天我们要讲的内容是继承~这次我们依然拿动物举例&#xff01; 首先&#xff0c;我们创建了一个鸟类&#xff08;不是骂人啊&#xff0c;就是bird鸟类&#xff09; public class bird {publ…

操作系统学习笔记-3.1内存管理

文章目录 内存的地址绝对装入静态重定位动态重定位 链接覆盖和交换1. 覆盖&#xff08;Overwrite&#xff09;在内存管理中的作用2. 交换&#xff08;Swap&#xff09;在内存管理中的作用 连续分配管理方式固定分区分配的关键概念优点缺点示例动态分区分配的关键概念优点缺点示…

练习LabVIEW第四十题

学习目标&#xff1a; 用labvIEW做一个循环闪烁指示灯&#xff0c;要能够在前面板调节周期和占空比。 开始编写&#xff1a; 前面板 一个布尔指示灯一维数组&#xff0c;两个数值输入控件&#xff1b; 程序框图 添加一个while循环&#xff0c;循环内添加初始化数组&…

Unity 打包AB Timeline 引用丢失,错误问题

1、裁剪 在 link.xml 添加 <assembly fullname"Unity.Timeline" preserve"all"/> 上面这一步我其实做了&#xff0c;但还是不行&#xff0c;各种搜索&#xff0c;不得解&#xff0c;还有创建一个空的Timeline 放到 Resources目录下的&#xff0c;也…

206面试题(28~46)

206道Java面试题&#xff08;28~46&#xff09; 28.Array和ArrayList有什么区别&#xff1f; 一、基本性质 Array(数组) Array是一种固定大小的数据结构。 用于存储多个相同类型的元素。 创建时需要指定数组的大小&#xff0c;且长度定义完后不能改变。 ArrayList(动态数组)…

Echarts使用柱状图实现横向数据展示,实现为每个柱子设置不同的颜色

这里使用echarts柱状图实现横向数据展示&#xff0c;同时给每个柱子设置不同的颜色&#xff0c;给柱子设置背景颜色等 话不多说直接上图吧 这里直接贴上代码&#xff1a; option {backgroundColor: "#1C162E", //背景颜色tooltip: {show: false},legend: {show: …

接口测试(十一)jmeter——断言

一、jmeter断言 添加【响应断言】 添加断言 运行后&#xff0c;在【察看结果树】中可得到&#xff0c;响应结果与断言不一致&#xff0c;就会红色标记

一文详解开源ETL工具Kettle!

一、Kettle 是什么 Kettle 是一款开源的 ETL&#xff08;Extract - Transform - Load&#xff09;工具&#xff0c;用于数据抽取、转换和加载。它提供了一个可视化的设计环境&#xff0c;允许用户通过简单的拖拽和配置操作来构建复杂的数据处理工作流&#xff0c;能够处理各种数…

Oracle 11g DataGuard GAP处理

1 说明 在Oracle Data Guard中&#xff0c;GAP是指在备库无法接收到一个或多个来自主库的归档日志文件时发生的情况&#xff0c;会导致数据保护和实时数据复制的能力受到影响。 Oracle Data Guard架构日志同步有三个阶段&#xff1a; 日志发送&#xff1b;日志接收&#xff…

jmeter结合ansible分布式压测--1数据准备

一、搭建ansible环境 ansible是基于python开发&#xff0c;通过ssh连接客户机执行任务。ansible可以批量系统配置、批量程序部署、批量运行命令等。 1、安装yum install ansible 2、检查ansible的版本:ansible --version 二、利用ansible在其他机器上准备压测数据 1、本地准…

Vue:计算属性

Vue&#xff1a;计算属性 计算属性getset 在模板中&#xff0c;有时候填入的值要依赖于多个属性计算得出。 例如使用姓和名拼出全名&#xff1a; 以上效果可以通过以下代码实现&#xff1a; <div id"root">姓&#xff1a;<input type"text" v-m…

PHP不良事件上报系统源码,医院安全不良事件管理系统,基于 vue2+element+ laravel框架开发

不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”&#xff0c;结合预存上百套已正在使用的模板&#xff0c;帮助医院从对护理事件、药品事件、医疗器械事件、医院感染事件、输血事件、意…

PL端:LED闪烁

实验环境 vivado2024.1 实验任务 LED闪烁 引脚关系 硬件配置 新建一个vivado实验 创建 Verilog HDL 文件点亮 LED 点击 Project Manager 下的 Add Sources 图标&#xff08;或者使用快捷键 AltA&#xff09; 编辑led.v module led(input sys_clk,input rst_n,outp…

摘要、数字签名、对称加密、非对称加密综合应用示例以及技术原理说明

图&#xff1a;介绍了数字信封的安全传输过程 关键术语 散列&#xff1a;Hash&#xff08;哈希&#xff09;&#xff0c;一般翻译做散列、杂凑&#xff0c;是把任意长度的输入&#xff08;数据信息&#xff09;通过散列算法变换成固定长度的输出&#xff0c;该输出就是散列值…

美股集体收跌:汇盈策略股票交易特朗普、哈里斯概念股一同上涨

查查配分析随着美国大选进入最后倒计时,三大指数在多数投资者保持观望的状态下集体收跌。美债收益率集体回落,十年期美债收益率跌超8个基点至4.29%。 截至周一收盘,标普500指数跌0.28%,报5712.69点;纳斯达克指数跌0.33%,报18179.98点;道琼斯工业指数跌0.61%,报41794.6点。 汇…