JAVA中IO的使用------File篇

JAVA中IO的使用

Java.io包基本包含了初学java所需要使用的所有输入输出相关内容,io中的流类又包含了输入流和输出流两大类。通过io包我们基本可以操作本地硬盘上的所有文件。本篇将基本的介绍一下File的相关知识,以便为后面学习流相关操作做相关知识准备。(冲冲冲!)
在这里插入图片描述

1.File初识

File的构造方法:
在这里插入图片描述
先一个一个看一下吧,第一个方法有两个参数,前面一个是File类型,后面是String,也就是说,你要给他的前一个参数是一个文件(File),后面一个是你要创建的文件的名字,那这意思就很明显,前面一个是你父文件夹的对象(强调一下,是一个File类型的对象),后面一个参数是你要创建的文件的名字呗。那第一个去跟第三个比较一下,方法三,前一个参数是String,那很明显就是父文件的名字了,后面一个是文件的名字。那再来看看第二个方法,直接给一个String类型的参数,在这个方法你可以直接给一个绝对路径,或者相对路径也可以。真正开发中第二个方法是最常用的。至于第四个方法,File通过将给定URI转换为抽象路径名来创建新实例 。这个方法前期基本用不到的。这里就不多说了。

那这个File是个啥呢?一开始你知道他是文件,那么你在敲代码的时候简单创建了一个File对象输入文件的路径,ok!完事了,我成功创建了一个文件!
在这里插入图片描述
可是并没什么luan用,因为这里创建的File与本地硬盘上对应的文件完全没有任何关系。你以为你现在就能操作文件了?
在这里插入图片描述
那你试一下看看文件存在吗,你再输出一下看看

File file = new File("D://java//TsetFile//test.txt");
        System.out.println(file.exists());
        

你会发现,嗯?false???

false

那也就是说文件不存呗。所以其实,这里的File与真实硬盘中的文件或者文件夹不是一个东西,我们所说的Flie只是内存中的一个对象,file是需要我们去new的,就像集合,类对象一样,我们都是在虚拟机中(确切的说是在堆内存中)为它开辟一个空间。而我们要操作的却是硬盘上的文件,所以实际上,这个file与硬盘上的文件实质上是一个映射的关系。
换句话说,如果你创建文件时的路径是正确的,ok,那么你成功“射”上去了。路径不正确,那就是你没射上呗。所以你看即使我创建的文件是不存在的,编译时也没报错。大不了我们操作不了这个文件而已,File的一些初始值(比如 :可读?可写?可操作性?)都是false而已。

File file = new File("D://java//TsetFile//test.txt");
        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isHidden());
        System.out.println(file.canRead());
        System.out.println(file.canWrite());
false
false
false
false
false

但是之后当我们用到流的相关技术(后面会写到)去操作文件时,那时候就会报错了。(这里提一嘴,在我们本地硬盘上(windows系统是这样),文件是不区分大小写的,但是我们在编程时,我们写的code是有大小写区分的)

2.File常用的几个方法

这里简单说几个File的常用方法吧

  • createNewFile
    创建一个新的文件,这个只能创建文件,举个栗子,
File file = new File("D://java//TestFile//test.txt");
try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        } 

刚刚上面不是发现这个文件没有对吧,那现在就可以用createNewFile创建一个了。那问题来了,如果我test后面的txt没写呢?
那试一下嘛,
在这里插入图片描述
看见了吧,没有后缀它还是会创建出来,只不过打开的时候你要选择打开方式。那又有一个问题,如果我的父文件夹不存在呢?ok那我们再试一下?
这还试个锤子,肯定不行啊,没有父亲哪来的孩子呢。那会不会再帮我们创建一个新的文件夹?肯定不可能啊!在最初就已经说了,createNewFile只能创建文件。那要创建文件夹怎么办,看下面的方法

  • mkdir和mkdirs
    mkdir可以帮你创建一个新的文件夹,那如果这个文件夹没有父亲怎么办?mkdirs呗,+s变复数都是小学英语了。
    但是记住你这次创建的是文件夹嗷,可别把后缀名给写上去了。那如果还真的傻乎乎的写上去了怎么办?没关系!
File file = new File("D://java//TestFile//test.txt");
file.mkdir();

在这里插入图片描述
你创建的文件夹就叫test.txt。莫慌,问题不大。所以java在创建文件夹还是文件时,取决于你调用的方法,方法的优先级更高。

  • delete
    没什么好说的,就是删除文件
    但是千万要慎用,因为这里delete之后,那就真的删除了,你连回收站都找不到它。别傻乎乎的在后面的参数里面写个(C:\),不信你就试试。
    另起一行! 声明一下:你系统没了跟我可没关系啊!!!

声明:

  • getName和getPath
    getName获取文件名,getPath是获取文件的路径名,返回值都是String类型的,所以懂我意思了吧。

  • getParent和getParentFile
    getParent返回值是String,所以是当前文件父文件夹的名字,getParentFile返回值是File类型,那不返回父对象呗。

  • list和listFiles
    直接上代码

 File newfile = new File("D://java//TestFile//test");
        String[] str = newfile.list();
        System.out.println(str.length);
        System.out.println(str[0]);
        File[] values = newfile.listFiles();
        System.out.println(values.length);
        System.out.println(values[0]);

就以test文件夹下有个test.txt为例子
在这里插入图片描述
list返回的是String[ ],一个String数组,String存放的那只能是字符串了,所以就是子文件和子文件夹的名字。listFiles返回的是File[ ] 类型,所以是子文件和子文件夹的对象。看一下输出结果

1
test.txt
1
D:\java\TestFile\test\test.txt

那总结一下:

  1. file对象为空,证明当前file是一个文件而不是文件夹
  2. file对象不为空,证明当前file是一个文件夹
  3. file对象的length不等于0,证明当前file文件夹里面有东西

那又有一个小问题既然我能获取到当前文件夹的子文件和子文件夹,那么我们怎么去获取当前文件夹的所有的子文件呢。循环?循环能达到我们的遍历要求吗?最后一个知识点,递归。

File的递归

public void FindAllFiles(File file){//先把你要遍历的文件夹传进来
        File[] files = file.listFiles();//files数组接收file的所有子文件(夹)
        if(files!=null&&files.length>0){//之前已经说过了,file对象不为空且length大于0才表示里面有元素
            for(File f:files){//for-each访问每一个元素
                this.FindAllFiles(f);//这里就是递归了 如果当前file内有元素,那就再进去访问一次
            }
        }
        System.out.println(file.getAbsoluteFile());
    }

递归一直都是一种很重要的算法思想,文件的遍历就很好的利用了这种思想。

File的常见基础知识就基本都在这了,其实还有很多没有提及的File方法,要是感兴趣可以去Oracle官网多看看。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值