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

【剧前爆米花--爪哇岛寻宝】java文件操作和io流

作者:困了电视剧

专栏:《JavaEE初阶》

文章分布:这是一篇关于文件操作的文件,介绍了文件读写以及相关对象的内容,希望对你有所帮助!

 

目录

文件操作

文件路径

绝对路径

相对路径

File类

File类的构造方法

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

字节流

字符流


文件操作

我们平时谈到的“文件”,指的都是硬盘上的文件,但是由于硬盘访问速度慢等特性,我们的代码绝大多数都是围绕内存进行展开。

MySQL主要就是操作硬盘,文件IO在这里主要也是操作硬盘。

文件操作主要分为两个部分:

1.文件系统操作

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

2.文件内容操作

   针对文件内容进行读 和 写。

文件路径

这地方就是每一个文件的路径,指向一个文件的具体位置。

计算机的目录是有层级结构的,可以将文件的存储想象成一个树型结构,这样文件路径就可以理解为,从树的根节点出发,沿着树枝,一路往下走,到达目标文件,此时这中间经过的内容。

绝对路径

从盘符开始,一层一层向下找,这个过程得到的路径就是绝对路径。

如上图所示,此时D:/bitStudy/bit_java/tmp就是该文件的绝对路径.

注:这里要是用正斜杠不要使用反斜杠,使用反斜杠在编写代码的时候需要打两次进行转义,但正斜杠则不需要。

相对路径

从给定的某个目录出发,一层一层往下找,这个过程得到的路径就是相对路径。

一定要明确,基准目录(工作目录)是什么,否则则很有可能出错

tips:.在相对路径中是一个特殊符号,表示当前目录。

        .. 也是特殊符号,表示当前目录的上级目录,就比如:

我现在想访问c_c++这个目录文件,但是我的基准目录到bitStudy,怎么办?答案:直接使用../。

../ c_c++,../让我们到了D:/这一层,在直接访问即可。

举个栗子:

比如我的工作目录是D:/bitStudy,那我的相对路径就可以表示为:

./bit_java/tmp

File类

java标准库,给我们提供了File这个类,我们的代码为了提高效率并不直接操控硬盘而是内存,这个File对象就是硬盘上的一个文件的“抽象”表示。

文件是存储在硬盘上的。

直接通过代码操作硬盘并不方便,于是就在内存中创建一个对应的对象,操作这个内存中的对象,就可以间接的影响到硬盘的文件情况了。

File类的构造方法

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

针对文本文件,提供了一组类,统称为“字符流”(典型代表 Reader, Writer),他读写的基本单位是字符。

针对二进制文件,也提供了一组类,统称为“字节流”(典型代表 InputStream,OutputStream),读写的基本单位是字节。

使用数据流必须要在使用结束后进行关闭,否则在某些环境下会造成很严重的问题。这几个典型类都实现了一个Closeable接口。

当我们在使用实现这些接口的类时,可以使用这样的一个语法:

 这样,当我们执行完try括号中的语句后,就会自动关闭流,降低出错的可能。 

字节流

public class Test {
    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("d:/bitStudy/bit_java/tmp/test.txt");

        try (InputStream inputStream = new FileInputStream(file)){
            while (true){
                int b = inputStream.read();
                if (b == -1){
                    break;
                }
                System.out.println(b);
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

我的上述代码实现的功能是将该文件中的内容用字节的方式读出来,结果如下: 

由图我们可以看到,java将文件中的内容用ASCII码的形式读了出来,这就是字节流。

字符流

字符流相关的方法比较多,在这里我先梳理一下,首先Writer是一个抽象类,PrintWriter类,OutputStreamWriter类继承Writer类,FileWriter类继承OutputStreamWriter类

public class Test {
    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("d:/bitStudy/bit_java/tmp/test.txt");
        try (InputStream inputStream = new FileInputStream(file)){
            Scanner scanner = new Scanner(inputStream);
            while (scanner.hasNext()){
                String  b = scanner.next();
                System.out.println(b);
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

当我们用字符流读文件的时候,结果就是我们文件中的内容:

 我们再读取二进制文件的时候一般使用字节流进行读取,读取一些类似文本文件的时候一般会用字符流进行读取。

以上就是本篇博客的全部内容,如有疏漏还请指正!


http://www.kler.cn/a/9232.html

相关文章:

  • 线性表-数组描述补充 迭代器(C++)
  • 数据分析——学习框架
  • 速通LoRA:《LoRA: Low-Rank Adaptation of Large Language Models》全文解读
  • 把握鸿蒙生态崛起的机遇:开发者视角的探讨
  • 一篇Spring Boot 笔记
  • macos中安装和设置ninja
  • 应急响应真的很重要!
  • 全排列1_dfs
  • 数据安全-数据分类分级方案设计
  • Thinkphp 6.0多语言
  • SpringSession深入浅出(一)
  • Chapter2 : SpringBoot配置
  • Sharepoint Online手工迁移方案 | 分享二
  • 问题 A: C语言11.1
  • 【Lin-CMS内容管理系统框架 v0.3.6】内置用户管理/权限管理/日志系统等常见功能
  • 【JS】1651- 10 个 JS 中 try...catch 使用技巧
  • RGBD图像转灰度图
  • Leetcode.100 相同的树
  • 【神经网路】tensorflow实验6--TensorFlow基础
  • 让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud)
  • 简单的做一个学校毕业啊项目
  • 【刷题之路】LeetCode 2389. 和有限的最长子序列
  • kafka-3 集群介绍
  • C19210-H10 K80-TM02铜合金板带耐蚀性好
  • 【JavaWeb】9—监听器
  • 版本控制:git的基本使用