File和InputStream,OutputStream

devtools/2024/11/7 21:12:15/

目录

认识⽂件

树型结构组织 和 ⽬录

⽂件路径(Path)

文件的种类

File类

属性

构造方法

方法

代码示例

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

java%E4%B8%AD%E6%8F%90%E4%BE%9B%E4%BA%86%E4%B8%80%E7%BB%84%E7%B1%BB%E8%A1%A8%E7%A4%BA%E6%B5%81-toc" style="margin-left:120px;">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文件的路径使用绝对路径/相对路径均可

方法


代码示例
java">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());}
}
java">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());}
}
java">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());}
}
java">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());}
}
java">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%E4%B8%AD%E6%8F%90%E4%BE%9B%E4%BA%86%E4%B8%80%E7%BB%84%E7%B1%BB%E8%A1%A8%E7%A4%BA%E6%B5%81">java中提供了一组类表示流

分成两个大类别

1.字节流

读写文件,以字节为单位

是针对二进制文件使用的

InputStream 输入   从文件读数据

OutputStream 输出   往文件写数据

2.字符流

读写文件,以字符为单位

是针对文本文件使用的

Reader 输入   从文件读数据

Writer 输出   往文件写数据


InputStream概述
方法

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

FileInputStream概述
构造方法

java">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
java">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.应该使用哪个流对象

先区分是文本,二进制

再区分度读还是写


http://www.ppmy.cn/devtools/131701.html

相关文章

如何删除react项目的默认图标,使在浏览器中不显示默认图标favicon.ico

要删除 React 项目的默认图标&#xff0c;使在浏览器中不显示默认图标favicon.ico&#xff0c;其实有两种方法&#xff1a; 方法一 方法要点&#xff1a;删除掉 public 目录下的 favicon.ico 文件&#xff0c;再用浏览器访问时&#xff0c;如果加载不到图标文件&#xff0c;就…

TrafficPeak | TB级云原生数据平台释放全新洞察力

Hydrolix是一款专为TB级工作负载设计的云原生数据平台&#xff0c;旨在消除现有解决方案中广泛存在的数据焦虑、技术障碍和限制等问题&#xff0c;为用户提供不受限制的实时可观察性。 最近&#xff0c;Hydrolix与Akamai联手&#xff0c;基于Akamai Connected Cloud提供完全托管…

AutoCAD2024

链接: https://pan.baidu.com/s/1TkUVIlwPUNef2o_KRP8VVg 提取码: 3yg2 简介&#xff1a;仅支持Win10/Win11、1909以上系统

Python 线程学习知识大全

一、Python 线程简介 线程是操作系统能够进行运算调度的最小单位&#xff0c;在 Python 中&#xff0c;threading模块提供了对线程的支持。使用线程可以实现并行和并发执行任务&#xff0c;从而提高程序的效率。 二、Python 线程不用 join() 以下是一个没有使用join()的示例…

LINUX离线安装Milvus

一.下载安装包 离线安装Docker需要你提前下载Docker的安装包&#xff0c;并将其传输到目标机器上进行安装。以下是一个基于Linux系统的离线安装Docker的简要步骤和示例&#xff1a; 从有网络的机器上下载Docker安装包。 将下载的安装包拷贝到离线的服务器上。 在离线的服务…

随机性、熵与随机数生成器:解析伪随机数生成器(PRNG)和真随机数生成器(TRNG)

随机性在诸多领域中扮演着至关重要的角色,涵盖密码学、仿真和机器学习等方面。因为随机性为无偏决策、不可预测序列和安全加密提供了基础。然而生成随机数是一项复杂的任务,理解伪随机数生成(pseudo-random number generation, PRNG)与真随机数生成(true random number generat…

【ESP32+MicroPython】单位数码管使用

在本教程中&#xff0c;我们将使用ESP32和MicroPython来驱动一个带小数点的单位数码管&#xff08;7段显示器&#xff09;。将详细讲解数码管的工作原理&#xff0c;并分步骤完成从基本的段位控制到完整的数字显示&#xff0c;最后封装成可重用的控制类。同时&#xff0c;本文将…

第一章 Linux安装 -- 安装Debian 12操作系统(四)

文章目录 2.3.4 安装Debian 12操作系统 2.3.4 安装Debian 12操作系统 虚拟机的创建参照前面2.3.1.3节里的步骤创建&#xff0c;这里不再详述。 下面就开始安装Debian 12系统了&#xff0c;单击“开启此虚拟机”&#xff0c;如图1-161虚拟机主界面。 图1-161 虚拟机主界面 弹…