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

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

先区分是文本,二进制

再区分度读还是写


http://www.mrgr.cn/news/66420.html

相关文章:

  • 鸿蒙Harmony-矩形绘制组件Rect使用详解
  • SQL 语法学习
  • 加密货币行业与2024年美国大选
  • Selective Generation for Language Models 语言模型的选择性生成
  • Photoshop 2025重磅来袭 :全新功能炫耀安装!Adobe全家桶
  • [每日一练]使用nunique函数查找唯一值
  • 什么时候出现线程安全,如何实现线程安全?
  • 如何显示弹出式窗口
  • Spark的容错机制
  • WCY的比赛题解
  • java学习3---面向对象
  • 19. 架构重要需求
  • 1105--面试代码题
  • HttpClientUtils
  • 了解数据库并发产生的问题
  • 大数据新视界 -- 大数据大厂之 Impala 与内存管理:如何避免资源瓶颈(上)(5/30)
  • Java开发中的分布式锁使用教程
  • 安装nodemon报错
  • 三维测量与建模笔记 - 3.1 相机标定基本概念
  • 什么是Scaling Law,谈谈你对它的理解
  • PyTorch 2.0: 开启深度学习框架新纪元
  • DI 依赖注入
  • 动态规划之二维背包及杂项
  • 『Anaconda』一文汇总最最最常用的conda指令,强烈建议收藏!!!
  • 【AI落地应用实战】HivisionIDPhotos AI证件照制作实践指南
  • VSCode 上那些值得推荐的 CSS 插件