java中的IO流之File类(一)

本文详细介绍了Java中File类的基本操作,包括创建、验证、删除文件或目录,以及获取路径、名称、父目录等信息。同时,通过递归方法展示了如何打印目录的层次结构,涉及文件和目录的层级关系与遍历。

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

File类
File类表示文件或目录在JVM中的一种抽象形式。
File类对文件或目录进行了封装,提供对文件或目录的操作方法,可以方便编程时使用。
注意:
•创建File对象,File可以表示文件或目录。

•不同的OS中,路径的分隔符也不相同。windows中,路径分隔符可以使用/或\\;Linux或unix中,路径分隔符使用/;File类提供了一个静态的路径分隔符的属性,该属性根据JVM在不同的OS中,可以得到当前OS的路径分隔符。

下面的一些方法在以后的编程应用中会经常用到,应该牢记。

package com.jcxy.demo17;

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

public class FileTest
{
    public static void main(String[] args) throws IOException
    {
        File f = new File("f:\\wanghu");
        File f2 = new File("f:\\wanghu");
        //当文件不存在时创建并返回true,存在则返回
        System.out.println(f.createNewFile());
        // 测试此抽象路径名表示的文件或目录是否存在。
        System.out.println(f.isFile());
        
        System.out.println(f.delete());
        
        //测试此抽象路径名表示的文件或目录是否存在。
        System.out.println(f.exists());
        
        //返回此抽象路径名的绝对路径名形式。
        File f3 = f2.getAbsoluteFile();
        System.out.println(f3);
        
        //返回由此抽象路径名表示的文件或目录的名称。
        System.out.println(f2.getName());//wanghu
        
        //返回此抽象路径名父目录的路径名字符串
        System.out.println(f2.getParent());
        
        //返回此抽象路径名父目录的抽象路径名
        System.out.println(f2.getParentFile());
        
        //测试此抽象路径名表示的文件是否是一个标准文件
        System.out.println(f2.isFile());
        
        //返回此抽象路径名表示的文件最后一次被修改的时间。
        long l = f2.lastModified();
        System.out.println(l);
        
        
        File f4 = new File("f:\\hu\\haha");
        //创建此抽象路径名指定的目录。只能创建一层
        System.out.println(f4.mkdir());//false
        
        //创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。可以创建多层
        System.out.println(f4.mkdirs());//true
        
        //与系统有关的默认名称分隔符
        System.out.println(f4.separator);
    }
}
接下来我们可以通过上面的方法来完成一个题目,不过在完成之前应该了解一下什么是递归,下面会用到,以后也会用到。

•函数的递归:
函数的递归调用,就是在函数中,调用自身。
1、函数递归,必须要有一个能够终止递归的出口。
2、函数递归时,还要注意,如果递归的层次过多,可能造成内存溢出。(比如不停的创建对象,当递归循环到一定程度,内存装不下所new出来的对象就会导致内存溢出)

我们来打印一个目录的层次结构

例如:

Test

Acorn

acorn.txt

Banji

Banji

banji.txt

bandi.conf

banjia.txt

Colro

Coral

coral

coral.txt

db.conf

hu.txt

从外往内打印出文件的层次结构,属于同一个层次结构的目录或者文件应该有相同的tab位即空格数量相同。

分析:

1、我们第一步应该是要获取到文件夹及里面的内容,可以通过File类中的方法实现

2、当在同一级中,如果是文件夹则继续递归遍历里面的内容,如果是文件则直接打印

3、我们应该定义一个方法专门来负责打印tab的数量

下面来看代码

package com.jcxy.demo17;

import java.io.File;

public class Test6
{
    public static void main(String[] args)
    {
        //首先找到这个文件
        File file = new File("f:/Test");
        //定义一个方法用于完成文件夹的遍历
        //第一个参数是文件路径,第二个参数用于递归的时候传入,来打印tab数量  
        getDirPath(file,0);
    }

    private static void getDirPath(File file, int count)
    {
        //得到Test文件夹中的文件夹及文件
        File[] fes = file.listFiles();
        //如果file中没有文件夹,只有文件,则打印输出文件名称即可
        //不用向下执行,所以直接return
        if(fes == null)
        {
            return;
        }
        //定义一个方法负责打印tab数量
        printSpace(count);
        //得到文件夹的名字
        String strFile = file.getName();
        System.out.println(strFile);
        //接着文件夹中文件和文件夹应该多一个tab位
        count++;
        //遍历文件夹中的文件或文件夹
        for(File fe : fes)
        {
            //如果是文件夹则继续递归调用
            if(fe.isDirectory())
            {
                getDirPath(fe,count);
            }
            else
            {   
                printSpace(count);
                System.out.println(fe.getName());
            }
        }
        
    }

    private static void printSpace(int count)
    {
        for(int i = 0; i < count; i++)
        {
            System.out.print("\t");
        }
    }
}

通过简单的方法调用及递归可以实现文件层次结构的打印输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值