文件操作---IO

这篇具有很好参考价值的文章主要介绍了文件操作---IO。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是文件?

  • 狭义的文件:存储在硬盘上的数据,以“文件”为单位,进行组织。比如:
    文件操作---IO,JavaEE初阶,java

  • 广义的文件:操作系统是用来管理软硬件资源的,操作系统往往把这些资源都统一的抽象成“文件”来进行管理。即“一切皆文件”。

    比如:有一个键盘,从键盘读取数据就是读文件;将信息显示在屏幕上就是写文件

文件的路径

文件在电脑中是以“目录结构”的形式存储的,这个“目录结构”其实是一个N叉树。那么我们怎样找到一个具体的文件地址呢?就通过“路径”的概念,来描述一个文件在你电脑上的具体位置。路径又分为两类:绝对路径和相对路径。

  • 绝对路径:

    文件操作---IO,JavaEE初阶,java
    像这样的、完整的路径就是绝对路径。它从盘符开始一直指向你要找的文件。
    通过’\'来分割每一级目录

  • 相对路径:

    首先得先有一个“基准路径”,也叫“工作路径”。
    相对路径就是以基准路径为起点,一直指向你要找的文件。

    如果基准路径是D,则相对路径是 .\program\qq\Bin\qq.exe 通过 '.‘表示当前目录
    如果基准路径是D:\program\qq\Bin,则相对路径是 .\qq.exe
    如果基准路径是D:\program\WeChat,则相对路径是 …\qq\Bin\qq.exe 通过’…'表示返回上级目录

文件的系统操作

文件操作是属于操作系统层面提供的一些API,不同的操作系统提供的API不同。但是Java作为一个跨平台的语言,就在JVM中把这些不同的API进行了封装。我们就可以直接使用库中的类来进行操作了。

我们使用File类来进行文件操作,它里面有一些方法需要我们学习:

  1. 获取文件的基本属性
        //写法一:后三个看起来一样
        File file = new File("D:/test.txt");
        
        //获取父目录文件路径
        System.out.println(file.getParent());            //D:/
        //获取文件名
        System.out.println(file.getName());				//test.txt
        //获取文件路径
        System.out.println(file.getPath());				//D:/test.txt
        //获取文件的绝对路径
        System.out.println(file.getAbsolutePath());		//D:/test.txt
        //获取修饰过的绝对路径
        System.out.println(file.getCanonicalPath());	//D:/test.txt
		//写法二:后三个不一样
        File file = new File("./test.txt");
        
        //获取父目录文件路径
        System.out.println(file.getParent());            //.
        //获取文件名
        System.out.println(file.getName());				//test.txt
        //获取文件路径
        System.out.println(file.getPath());				//./test.txt
        //获取文件的绝对路径
        System.out.println(file.getAbsolutePath());		//D:\Code\Java-Code\java-code\2023-10-31\.\test.txt
        //获取修饰过的绝对路径
        System.out.println(file.getCanonicalPath());	//D:\Code\Java-Code\java-code\2023-10-31\test.txt
  1. 判断文件的状态
		File file = new File("./test.txt");
        //判断文件是否存在
        System.out.println(file.exists());			//false
        //判断文件是否是目录
        System.out.println(file.isDirectory());		//false
        //判断文件是否是普通文件
        System.out.println(file.isFile());			//false
        
        file.createNewFile();
        System.out.println(file.exists());			//true
        System.out.println(file.isDirectory());		//false
        System.out.println(file.isFile());			//true
  1. 文件重命名
        //重命名
        //前提:srcFile必须存在  destFile必须不存在
        File srcFile = new File("./aaa.txt");
        File destFile = new File("./bbb.txt");
        
        System.out.println(srcFile.getName());			//aaa.txt

        srcFile.renameTo(destFile);
        System.out.println(srcFile.getName());			//bbb.txt
  1. 创建目录
        //创建目录
        File file = new File("./testDir");
        file.mkdir();
        

        //创建多级目录
        File file = new File("./testDir/aaa/bbb");
        file.mkdirs();

  1. 文件/目录删除
		//文件删除
		file.delete();

		//在删除目录时,1.创建完多层目录后默认停留在最后一层
					  2.要指定每一级目录然后逐级删除
  1. 得到文件夹下的所有目录名
        //得到文件夹下的所有目录名
        File file = new File("./dir/aaa/bbb");
        file.mkdirs();  // 创建完目录之后  file会自动指向到最低级的目录

        File file1 = new File("./dir");

		//返回值是一个字符串数组
        String[] results = file1.list();
        System.out.println(Arrays.toString(results));
  1. 得到文件夹下的所有文件
        //得到文件夹下的所有文件
        File file = new File("./dir/ccc.txt");
        File file1 = new File("./dir/ddd.txt");
        file.createNewFile();
        file1.createNewFile();

        File file2 = new File("./dir");

		//返回值是一个文件数组
        File[] results = file2.listFiles();
        for (File file3 : results){
            System.out.println(file3.getName());
        }

文件的内容操作

我们通过“流”来进行文件的读写操作。就像“水流“一样,需要使用时打开”流入“,使用中一直在”流“,使用完成后关闭。Java标准库就在”流“的概念上,提供了一组类用来完成读写文件的操作!

我们首先要明白的就是:输入和输出是对于CPU而言的。
将数据送到CPU中执行,就是输入;把运算好的结果从CPU拿走,就是输出。
文件操作---IO,JavaEE初阶,java

面向字节流

面向字节流的读操作(InputStream)

文件操作---IO,JavaEE初阶,java

        //读文件操作
        File file = new File("./aaa.txt");
        file.createNewFile();

        InputStream inputStream = new FileInputStream("./aaa.txt");

        while (true){
            int a = inputStream.read();
            //读到文件末尾时  返回-1
            if (a == -1){
                break;
            }
            System.out.println(a);
        }
        inputStream.close();

面向字节流的写操作(OutputStream)

文件操作---IO,JavaEE初阶,java

        //写文件操作
        //使用OutputStream进行写文件操作的时候   只要文件打开了,文件原有内容就会清空
        //操作的是字节  可以直接传数字或者字符   不能传字符串----》 传字节数组
        OutputStream outputStream = new FileOutputStream("./aaa.txt");

        outputStream.write(97);
        outputStream.write(98);
        outputStream.write(99);

        outputStream.close();

面向字符流

面向字符流的读操作(Reader)

使用的方法和InputStream一样。

        //按字符进行读
        Reader reader = new FileReader("./aaa.txt");
        while (true){
            int ret = reader.read();
            if (ret == -1){
                break;
            }
            char ch = (char)ret;
            System.out.println(ch);
        }
        reader.close();

面向字符流的写操作(Writer)

使用的方法和OutputStream一样。

        //按字符进行写
        Writer writer = new FileWriter("./aaa.txt");
        writer.write("hello world");
        writer.close();

将字节流操作改造成字符流操作

让InputStream可以读字符流(Scanner)

        //使用InputStream读取字符流   借助Scanner
        InputStream inputStream = new FileInputStream("./aaa.txt");
        Scanner scanner = new Scanner(inputStream,"UTF-8");
        while (scanner.hasNext()){
            String s = scanner.next();
            System.out.println(s);
        }
        inputStream.close();

让OutputStream可以写字符流(PrintWrite)

        //使用OutputStream写入字符流   借助PrintWrite
        OutputStream outputStream = new FileOutputStream("./aaa.txt");
        PrintWriter printWriter = new PrintWriter(outputStream);
        printWriter.print("hello");
        printWriter.print("你好");
        printWriter.flush();
        outputStream.close();

注:文章来源地址https://www.toymoban.com/news/detail-736226.html

  1. 进行文件读写的时候一定要记得调用close()方法,释放资源。因为:
    每个进程都对应着PCB(可能有多个),PCB里有文件描述符表,这些PCB都共用一个文件描述符表。文件描述符表是一个顺序表,是有长度上限的。每次打开一个文件,就会在表里创建一项;关闭一个文件,就销毁对应的那一项。当不关闭文件时,文件描述符表的资源就会被占满,下次就无法打开新的文件,是个大问题。
  2. 如果close()方法前出现了异常,那么可能就无法释放资源。我们可以使用try让close()一定被执行到。
        //把需要释放资源的东西放到try()的括号里  在try执行完之后  会自动调用close
        try (InputStream inputStream = new FileInputStream("./aaa.txt");
             OutputStream outputStream = new FileOutputStream("./aaa.txt")){
            .......
        }

到了这里,关于文件操作---IO的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JavaEE】文件操作和IO-目录扫描全文检索小程序

    不知道说啥了,看看吧 在之前的学习中,基本上都是围绕内存展开的~ MySQL 主要是操作硬盘的 文件IO也是是操作硬盘的~ IO : i nput o utput 创造文件,删除文件,重命名文件,创建目录······ 一些操作没有权限也做不了~ 1.1 路径 就是我们的文件系统上的一个文件/ 目录 的具

    2024年02月09日
    浏览(42)
  • JavaEE & 文件操作和IO & 目录扫描全文检索小程序

    不知道说啥了,看看吧 在之前的学习中,基本上都是围绕内存展开的~ MySQL 主要是操作硬盘的 文件IO也是是操作硬盘的~ IO : i nput o utput 创造文件,删除文件,重命名文件,创建目录······ 一些操作没有权限也做不了~ 1.1 路径 就是我们的文件系统上的一个文件/ 目录 的具

    2023年04月09日
    浏览(39)
  • IO(JavaEE初阶系列8)

    目录 前言: 1.文件 1.1认识文件 1.2结构和目录 1.3文件路径 1.4文本文件vs二进制文件 2.文件系统的操作 2.1Java中操作文件 2.2File概述 2.2.1构造File对象 2.2.2File中的一些方法 3.文件内容的操作 3.1字节流 3.1.1InPutStream的使用方法 3.1.2OutPutStream的使用方法 3.2字符流 3.2.1Reader的使用方法

    2024年02月14日
    浏览(48)
  • <JavaEE> 文件IO -- 数据流和文件内容操作(Reader 和 Writer 、InputStream 和 OutputStream)

    目录 一、数据流概述 二、流的关闭 2.1 使用 close() 方法 2.2 使用 try-finally 2.3 使用 try-with-resources 三、字符流的读写 3.1 Reader 类 3.2 Writer 类 四、字节流的读写 4.1 InputStream 类 4.2 OutputStream 类 1)在 Java 中,文件的操作分为两类 操作文件系统 通过 File 类,在系统中进行增、删

    2024年02月04日
    浏览(43)
  • 【文件IO操作】Java代码实现,文件与IO,文件类型,文件代码操作,文件操作案例

    前言: 大家好,我是 良辰丫 ,今天我将与大家一起学习文件操作的相关操作,跟随我的步伐,一起往下看!💞💞💞 🧑个人主页:良辰针不戳 📖所属专栏:javaEE初阶 🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。 💦期待大家三连,关注,

    2023年04月18日
    浏览(47)
  • 【Java EE 初阶】文件操作

    目录 1.什么是文件? 1.在cmd中查看指定目录的树形结构语法 2.文件路径 从当前目录开始找到目标程序(一个点) 返回到上一级目录,再找目标程序(两个点) 2.Java中文件操作 1.File概述 1.属性 2. 构造方法 3.常用方法  代码展示: 4.常用方法2 3. 文件内容的读写---数据流 1.I

    2024年02月06日
    浏览(43)
  • 【文件操作与IO】Java中如何操作文件

    目录  Java 中操作文件 File 概述 属性 构造方法 方法 代码示例 文件内容的读写 —— 数据流  InputStream 概述 FileInputStream 概述 利用 Scanner 进行字符读取 OutputStream 概述 利用 OutputStreamWriter 进行字符写入 利用 PrintWriter 找到我们熟悉的方法 代码参考 如何按字节进行数据读 如何按

    2024年02月12日
    浏览(57)
  • Java之文件操作与IO

    目录 一.认识文件 1.1文件是什么?  1.2文件的组织  1.3文件路径 1.4文件的分类 二.文件操作 2.1File概述  三.文件内容操作--IO 3.1JavaIO的认识  3.2Reader和Writer ⭐Reader类  ⭐Writer类 3.2FileInputStream和FileOutputStream ⭐FileInputStream类 ⭐FileOutputStream类 四.总结 🎁个人主页:tq02的博客_C

    2024年02月10日
    浏览(40)
  • JavaEE初阶:Java线程的状态

    目录 获取当前线程引用 休眠当前线程  线程的状态 1.NEW               2.TERMINATED  3.RUNNABLE 4.WAITING 5.TIMED_WAITING 6.BLOCKED 多线程的意义 单线程  多线程 这个方法返回当前线程的引用。但是我们会对static有疑惑,这其实是一个静态方法,更好的说法是这是一个 类方法, 调用这

    2024年02月11日
    浏览(42)
  • Java IO:文件读写、流操作与常用技巧

    Java IO流指的是Java输入输出流,用于处理与文件、网络等设备之间的数据传输。Java提供了 InputStream 和 OutputStream 两个抽象类作为所有输入输出流类的基类,以及 Reader 和 Writer 两个抽象类作为所有 字符 输入输出流类的基类。同时,Java还提供了许多具体的输入输出流类和字符输

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包