IO和文件操作

本文介绍了Java中关于IO操作、文件概念(包括文件类型、路径和目录结构)、以及如何使用File类进行文件系统操作,如创建、删除、重命名、修改路径和处理文件流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:IO

I:Input 输入
O:output 输出
IO:以CPU为基准,靠近CPU是输入操作,远离CPU是输出操作.
也是比较符合常识的.

在这里插入图片描述

二:文件

2.1 文件

文件本身是广义的概念.
其实在操作系统中把很多的资源(软件资源/硬件资源)都抽象成文件.
而此处谈到的文件,是指"狭义"的文件,也就是保存在硬盘上的这些文件.
文件夹是否是文件?
文件夹也是一种文件,称为"目录文件"或"目录",也是保存在硬盘上的.
在硬盘上,存在很多文件和目录,目录又存在一定的"嵌套关系",整体的这一套结构,是一个"N叉树".
在这里插入图片描述

2.2:路径

文件非常多,目录也非常多,目录之间还能嵌套,就需要在上述体系中,能够有,一种方式,标识某个具体的文件在哪里(通过这个机制就能具体定位到,找到某个文件头上)
路径:从根节点出发,一层一层往下走,最终到达目标文件之后,中间这些目录,集合在一起,就构成了"路径".

以盘符开头的路径,称为"绝对路径",
绝对路径,起点,是"此电脑"
相对路径,起点可以是任意路径

//在相对路径中, **.** 表示当前所在的位置  
//**..**表示返回上一级目录

2.3:文件的分类

文件,存储在硬盘上,
分类方式有很多种,在这里主要讨论的是一种和编写代码密切相关的:文本文件 VS 二进制文件
如果该文件在硬盘上存储的是文本数据,那么文件就是文本文件,如果该文件在硬盘上存储的是二进制数据,那么该文件就是二进制文件.
本质上,无论是文本数据,还是二进制数据,本质上都是010101这样的二进制数据,但文本数据中的二进制数据可以通过"GBK/UTF-8"
这样的编码表, 能够查出具体的有意义内容,不会出现乱码的现象.

一个简单粗暴,但是有效的方法,区分二进制文件和文本文件:
以记事本的打开方式,打开看看,如果没乱码,就是文本文件,如果乱码了,就是二进制文件.

记事本能把文件内容,按照文件的方式来理解(如果能理解,查表(GBK/UTF-8)成功了,不能理解就是二进制文件).
像:docx,pptx,mp3,mp4,pdf都属于二进制文件
像:md,html,java,c都属于文本文件.
文本文件是给人看的,二进制文件是给程序看的.

三:使用Java操作文件.

3.1:针对文件系统进行操作

创建文件,删除文件,创建目录,重命名文件…
Java标准库提供了File类表示一个文件,进一步的通过File提供的方法,就可以进行文件系统操作了.File类.

public class Demo1 {
    public static void main(String[] args) throws IOException { 
        File f = new File("d:/test.txt");
        /**
         * 将File对象关联到test.tex文件了(构造的时候确定)
         * 构造File对象的时候,写的路径不一定是真实存在的(都能关联成功)
         *  如果该路径下不存在该文件,可以后续调用创建方法创建文件
         */
        System.out.println(f.getParent());//返回File对象的父目录文件路径
        System.out.println(f.getName());//返回File对象的纯文件名称
        System.out.println(f.getPath());//返回File对象的文件路径(和构造File对象的时候一样)
        System.out.println(f.getAbsolutePath());//返回File对象的绝对路径
        System.out.println(f.getCanonicalPath());//返回File对象修饰过的绝对路径
    }
}

public class Demo1 {
    public static void main(String[] args) throws IOException {
        File f = new File("./test.txt");
        /**
         * 写成相对路径的时候,基准目录是什么,和运行程序的方式直接相关
         * 如果是通过idea,直接点击三角号运行程序,基准目录就是项目所在的目录
         *
         */
        System.out.println(f.getParent());//返回File对象的父目录文件路径
        System.out.println(f.getName());//返回File对象的纯文件名称
        System.out.println(f.getPath());//返回File对象的文件路径(和构造File对象的时候一样)
        System.out.println(f.getAbsolutePath());//返回File对象的绝对路径
        System.out.println(f.getCanonicalPath());//返回File对象修饰过的绝对路径
    }
}

3.3.1:创建文件

public class Demo3 {
    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());//判断File对象代表的文件是否是一个普通文件
        System.out.println(file.isDirectory());//判断File对象代表的文件是否是一个目录
    }


}

创建文件/目录的时候,如果路径是相对路径,那么当前idea所在文件夹就是要创建的文件/目录的父目录.

在这里插入图片描述

throws IOException :异常信息告诉我们,这里创建文件可能会失败.
创建文件什么时候会失败呢??
(1)给出的路径非法
(2)该路径权限不足.
如果文件已经存在,并不会抛异常.

3.3.2:创建目录

public class Demo4 {
    public static void main(String[] args) {
        File dir=new File("./testDir1/aaa/bbb/ccc");
        //dir.mkdir();//mkdir只能创建一级目录
        dir.mkdirs();//mkdirs可以创建多级目录
        System.out.println(dir.exists());
        System.out.println(dir.isFile());
        System.out.println(dir.isDirectory());
    }
}

在这里插入图片描述

在这里插入图片描述

3.3.3:进行文件重命名

import java.io.File;
import java.io.IOException;

public class Demo5 {
    public static void main(String[] args) throws IOException {
        File f1 = new File("./test3.txt");
        f1.createNewFile();
 
       File f2 = new File("test2.txt");//

      f1.renameTo(f2);//进行文件改名:./test3.txt  改成 test2.txt
    }
}

3.3.3:修改文件路径

public class Demo5 {
    public static void main(String[] args) throws IOException, InterruptedException {
        File f1 = new File("./test3.txt");
        f1.createNewFile();
         File dir=new File("./testDir");
          dir.mkdir();
        File f2=new File("./testDir/test3.text");
        f1.renameTo(f2);//修改文件路径,将./test3.txt改成./testDir/test3.text


    }
}

3.3.4:f.deleteOnExit();

有些程序,运行过程中会产生"临时文件",就需要在进程结束之后,自动删除掉,这样的情况,就可以使用deleteOnExit()的方式来实现.

比如:编辑word文档的时候,隐藏文件,就会实时记录当前你的编辑内容是什么,假设电脑突然掉电了,即使你没来得及保存,东西还能找回来,

3.2:针对文件内容进行操作

写文件,读文件,打开文件,关闭文件.
操作系统,针对文件操作的时候,引入了流的概念.
Java中通过"流"这样的一组类,进行上述的文件内容操作.

3.3.1:什么是流

举个栗子:
我现在想接100ml的水,可以一次接100ml,也可以接两次,每次接50ml,也可以接10 次,每次接10ml,也可以接100次,每次1ml…
对应到针对文件内容操作:
比如,要读取100字节的文件数据.
可以一次读100个字节,也可以分两次,每次读50字节,还可以分10次,每次读10字节,还可以分100次,每次读1字节…
读文件的方式非常灵活,和接水非常类似,因此就称为"文件流"
流分成两组:
字节流:以字节为单位,读写数据的.
读写二进制文件,使用字节流
InputStream,OutputStream;
字符流:以字符为单位,读写数据的.
读写文本文件,使用字符流.
Reader,writer

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十一.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值