💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
# 输入输出流(I/O编程) [TOC] ## I/O编程 I/O编程指的是操作文件流(Input/Output,输入/输出)编程,可以实现数据的读取和写入操作,Java针对I/O操作的实现提供了java.io工具包。 ### 什么是流 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。 **程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件**。 **流就是指一连串流动的字符,以先进先出的的方式发送信息的通道。** 在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类) >[info]在一开始我们学习Java的时候,实际上就接触过输出流,比如我们的`system.out.println()` ## 什么是文件 文件是计算机中基本的数据存储形式,在实际的存储数据中,如果对数据的读写速度要求不高,而且存储的数据量也不是很大,此时,可以选择使用文件这种持久化的存储方式。 所谓**持久化**,就是当程序退出,或者计算机关机以后,数据还是存在的。但是在程序内存中的数据会在程序关闭或计算机退出时丢失。 文件的组成:路径+文件的全名(文件名和文件后缀)。 关于文件后缀:只是定义了文件的打开方式不一样,如果更改后缀不会对文件的内部数据产生变化。 在不同的操作系统中,文件的路径表示形式是不一样的。 比如: `windows c:\windows\system\driver.txt` `Linux /user/my/tomcat/startup.txt` >[warning] 如果程序需要在不同的操作系统中运行,那么如果出现文件路径相关的设置时,必须要进行操作系统的判断,特别是windows和Linux关于斜杠的区别。 >[success]针对于不同操作系统的斜杠我们可以使用File类的路径分隔符常量`File.separator` ## 绝对路径与相对路径 ### 绝对路径 **绝对路径:是指文件在硬盘上真正存在的路径。(指对站点的根目录而言某文件的位置)————以web站点为根目录为参考基础的目录路径,之所以成为绝对,意指当所有网页引用同一文件时,所引用的路径都是一样的。** #### 引用本地文件 ~~~ Windows系统中的文件绝对路径 E:\companyWorkSpace\braun\bin\src\main\resources\js\dicList.js 当我们想要引入这样本地的一个js文件的时候。 写法: <script src="file:///E:/companyWorkSpace/braun/bin/src/main/resources/js/dicList.js"></script> ~~~ `file:///`:本地超文本传输协议 注意点:需要将路径中的反斜杠\\改为斜杆/ #### 引用网络文件 ~~~ 写法: <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.min.css" /> ~~~ `https://`:网络安全超文本协议 ### 相对路径 **相对路径:就是相对于自己的目标文件的位置。(指以当前文件所处目录而言文件的位置)————以引用文件之间网页所在位置为参考基础,而建立出的目录路径。因此当保存于不同目录的网页引用同一个文件时,所使用的路径将不相同,故称之为相对。** #### 相对路径的点与斜杠概念 **/、./、../、../../** * `/`这个斜杠代表的是根目录的意思,什么是根目录呢? **先看例子:** ~~~ F盘中有个文件夹vue_bamboos和一张图片 test-me.png vue_bamboos下有一个文件夹 a , a文件夹中有一个文件夹b; b文件夹下有一个index.html文件; F------------------------------------------- vue_bamboos------------------------- a-------------------------- b----------------- index.html- test-me.png------------------------- index.html:显示一张图片test-me.png, 这里我们使用就是根目录,也就是我们项目目录的上一级,也就是 F 盘是我们的根目录; 注意,我们的项目目录是vue_bamboos,但是vue_bamboos不是根目录,它的上一级才是!!! <body> <img src="/test-me.png" alt="测试根目录"> </body> ~~~ * `/`这个代表的是当前目录,也就是和我们的index.html 在同一级上 **先看例子** ~~~ 假设我们的项目目录: F--------------------------------- vue_bamboos--------------- index.html------ test-me.png----- <body> <img src="./test-me.png" alt="测试当前目录"> <img src="test-me.png" alt="测试当前目录"> </body> 也就是说我们可以这样写 ./test-me.png 或者省略 ./ 也是可以的, 直接写 test-me.png ~~~ * `../` 这个代表的意思是返回到上一级目录;  **先看例子** ~~~ 假设我们的项目目录: F------------------------------------- vue_bamboos------------------- index.html---------- b------------------------------ test-me.png--- <body> <img src="../b/test-me.png" alt="测试父目录"> </body> 也就是说我们先找到index.html所在的vue_bamoos这个文件夹,再在vue_bamoos文件夹的上级目录F盘中,找到b文件夹,最后找到test-me.png ~~~ > 第四个 `../../`         这个代表的是返回到上一级,再向上返回一级,返回了两级; > 第五个 `../../../`      这个比上面的多了一级,那么就是向上返回三级了;