Java中的IO操作---File相关操作

文件

Java中使用File类来描述一个文件
内核中需要管理文件:磁盘中有哪些文件以及哪些硬件设备 他的管理方式就是描述+组织

应用程序中也需要管理文件(相当于在管理当前进程打开/关联到的文件): 描述+组织

描述是使用File类描述,包含了文件的各种属性,以及提供了一些方法进行简单的文件操作
组织是用相应的数据结构进行组织

操作系统对于硬件设备进行了进一步的抽象: 把硬件设备都视为一个个文件
.exe .txt都是狭义上的 普通文件
c:windows 这是目录文件
快捷方式是链接文件
有一类特殊的文件,表示硬件设备
这是一切皆文件的思想
例如:通过网卡来传输数据,从网卡接受数据的操作就类似于读文件,从网卡中发送数据的操作就类似于写文件.

构造File对象的时候需要有一个pathname这样的参数.
这个参数叫做"文件的路径"

‪E:\BaiduNetdiskDownload\test.txt

根据这个路径一定能确定系统上唯一的一个文件
因为同一台主机上不可能存在两个文件的路径是完全相同的

但是路径也有两种表示方式

绝对路径:
以盘符开头的就是绝对路径

E:\
C:\

相对路径:
先指定一个工作目录,然后用.或者…开头的路径,表示一个具体的文件位置
相对路径的参照点就是当前的工作目录

例如:工作目录为:

E:\BaiduNetdiskDownload

此时相对路径就形如:

.\test.txt

" . " 就表示当前目录,(此处的当前目录就是工作目录,从当前目录的下级目录找
如果工作目录为:

E:\

那么此时相对路径就为:

.\BaiduNetdiskDownload\test.txt

所以当工作目录发生变化的时候,此时相对路径的写法,都会发生一些变化
上面的两个相对路径,对应的是同一个文件

“··” 表示工作目录的上一个目录
工作目录为:

E:\BaiduNetdiskDownload

那么相对目录为

..\BaiduNetdiskDownload\test.txt

那么构造File对象时,使用相对路径或者相对路径均可

代码部分

1.File
File file = new File("E:/BaiduNetdiskDownload/test.txt");

但是文件是否存在是不确定的

System.out.println(file.exists());

还可以看看文件的其他属性

File file = new File("E:/BaiduNetdiskDownload/test.txt");
System.out.println("文件是否存在"+ file.exists());
System.out.println("文件是否是普通文件"+ file.isFile());
System.out.println("文件是否是目录"+ file.isDirectory());

输出:
文件是否存在true
文件是否是普通文件true
文件是否是目录false

文件删除操作

File file= new File("E:/BaiduNetdiskDownload/test.txt");
file.delete();
System.out.println("文件是否存在"+ file.exists());
System.out.println("文件是否是普通文件"+ file.isFile());
System.out.println("文件是否是目录"+ file.isDirectory());

输出:
文件是否存在false
文件是否是普通文件false
文件是否是目录false

解释:因为文件已经被删除了,所以使用file描述的文件已经不存在了,也就不是文件了

创建文件
此时需要注意,createNewFile()方法会抛出一个IOException异常,所以我们要处理这个异常,这里我的操作是声明异常.

public static void main(String[] args) throws IOException {
        //这样就构造了一个具体的文件对象,他就对应到了这个
        File file = new File("E:/BaiduNetdiskDownload/test.txt");
        file.createNewFile();
        System.out.println("文件是否存在:"+ file.exists());
    }

输出:
文件是否存在:true

由此可见,文件已经被创建了

上面的操作什么时候会触发异常呢,当磁盘没有剩余空间的时候,就会触发该异常

补充
在Windows中目录和目录之间使用反斜杠 \ 分割地址 (Windows上也支持使用/)
在其他系统中使用正斜杠/分割地址
Java使用File.separator借助这个变量来自动适应不同的系统.

创建文件夹

File file = new File("E:/BaiduNetdiskDownload/day");
System.out.println("创建文件前:");
System.out.println("文件是否存在:" + file.exists());
System.out.println("文件是否是普通文件:"+file.isFile());
System.out.println("文件是否是目录文件:"+file.isDirectory());
file.mkdir();
System.out.println("创建文件后");
System.out.println("文件是否存在:"+file.exists());
System.out.println("文件是否为普通文件:"+file.isFile());
System.out.println("文件是否为目录文件:"+ file.isDirectory());

输出:
创建文件前:
文件是否存在:false
文件是否是普通文件:false
文件是否是目录文件:false
创建文件后
文件是否存在:true
文件是否为普通文件:false
文件是否为目录文件:true

创建多级目录
此时要使用 mkdirs 而不是mkdir

File file = new File("E:/BaiduNetdiskDownload/day/1/2/3/4");
file.mkdirs();
System.out.println("文件是否存在:"+file.exists());
System.out.println("文件是否为目录文件:"+ file.isDirectory());

输出:
文件是否存在:true
文件是否为目录文件:true

取得上级目录

File file = new File("E:/BaiduNetdiskDownload/day/1/2/3/4");
System.out.println(file.getParent());

输出:
E:\BaiduNetdiskDownload\day\1\2\3

查看当前目录下的内容

File file = new File("E:/BaiduNetdiskDownload");
File[] files = file.listFiles();
for(File f : files) {
    System.out.println(f);
}

输出:
E:\BaiduNetdiskDownload\day
E:\BaiduNetdiskDownload\test.txt

但是直接调用file.listFiles()只能看到当前目录下的内容

查看目录中的嵌套内容🌂
递归罗列出一个目录中包含的所有目录和文件

public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("E:/BaiduNetdiskDownload");
        listAllFiles(file);
    }
    private static void listAllFiles(File f) {
        if(f.isDirectory()) {
            //如果是目录就把目录包含的文件都罗列出来
            File[] files = f.listFiles();
            //如果是目录的话不会被打印,会一直向下递归到普通文件并打印普通文件
            for(File file : files) {
                listAllFiles(file);
            }
        }else {
            //如果不是目录文件就把这个普通文件文件的内容打印出来
            System.out.println(f);
        }
    }
}

输出:
E:\BaiduNetdiskDownload\day\1\2\3\4\test2.txt
E:\BaiduNetdiskDownload\test.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值