java详解 --- File类的方法与基本操作

一.File类

File类是java.io包下的一个类,从名字就可以看出来是以文件为操作对象的.
功能可以独立的完成对文件和文件夹的操作要求,亦可以辅助java.io包下的其他流类对文件的具体操作,例如读入和写入操作.
Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。
File对象代表磁盘中实际存在的文件和目录。通过以下构造方法创建一个File对象。

// 需要借助log4j2 创建一个单独向文件中输出错误信息的log
// ①.完善配置文件 -- log4j2.xml
// 1).增加向文件输出的Appender
// 2).设置对应输出的Logger
<?xml version="1.0" encoding="UTF-8"?>

<!-- 
    Configuration:设置配置文件根标签 
    status:设置系统的输出的log级别
-->
<Configuration status = "error">
    <!--
        Appenders: 设置输出源
    -->
    <Appenders>
        <!-- 
            Console:设置控制台输出
            name:appender的名字(自定义)
            target:设置输出格式(out / err) 
        -->
        <Console name = "cs" target = "system_out">
            <!-- 
                设置输出格式
                PatternLayout: 灵活的布局模式
            -->
            <PatternLayout pattern = "%d -- %msg%n" />
        </Console>
        <!-- 
            设置文件输出
            filename:文件的存放的地址
            append:是否覆盖前面的日志文件
        -->
        <File name = "fl" fileName = "./log/log4j2.log" append = "false"> 
            <PatternLayout pattern = "[%d][%l][%c] -- %msg%n" />
        </File>
    </Appenders>

    <!-- 设置打印者 Root / logger  -->
    <Loggers>
        <!-- 设置打印的log等级 -->
        <Root level = "info">
            <!-- 为输出 引用appender -->
            <AppenderRef ref = "cs" />
        </Root>

        <Logger name = "flLog" level = "warn">
                <AppenderRef ref = "fl" />
        </Logger>
    </Loggers>
</Configuration>

// ②.在类中创建Logger对应的Logger对象
// 该特定的Logger在使用时,便会向文件中输出错误信息
Logger flLog = LogManager.getLogger("flLog");

1.通过给定的路径字符串装换成抽象名路径创建一个File类
File(String pathname)

获取用户桌面的File实例:

// 获得桌面的绝对路径字符串
File f1 = new File("/User/**(这里填电脑的名称)/Desktop");
// 判断实例是否存在
log.info(f1.exist());

2.根据parent父类路径名字符串和child子类路径名字符串创建一个File类
File(String parent , String child)
在桌面生成一个test文件:

// 获取桌面的父级路径和创建的子级路径
File f2 = new File("/User/**(这里填电脑的名称)/Desktop" , "test");
log.info(f2.exist());

3.根据parent父类抽象路径名和child子类路径名字符串创建一个File类
File(File parent , String child)
在桌面生成一个test文件:

// 获取父类路径1中的f1和创建的子级路径
File f3 = new File(f1,"test");
log.info(f3.exist());

4..根据给定的file:uri地址装换成抽象路径名创建一个File类
File(URI uri)
在桌面生成一个test文件:

URI uri = null;
// 可能会有异常,所以需要try...catch...
try{
    uri = new URI("file:///USer/**(这里填电脑的名称)/Desktop/test");
}catch(URISyntaxException e){
    flLog.warn("URISyntaxException:" + e.getMessage());
}
// 可能会有异常,所以需要try...catch...
try{
    File f4 = new File(uri);
}catch(IllegalArgumentException e){
    flLog.warn("IllegalArgumentException:" + e.getMessage());
}
System.out.println(f4.exist());

拓展:
绝对路径根目录: /
相对路径根目录: ./
当前目录的上一级目录: ../

二.File类的方法

首先封装log类,后面都用得到

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

public class Log(
    public static final Logger ROOT_LOG = LogManager.getLogger();
    public static final Logger FILE_LOG = LogManager.getLogger("flLog");
)

创建对象成功后,就可以使用下面的方法操作文件了.
(以一中的log4j2.xml为例:)
创建log4j2.xml实例:(括号填的是对象存在的位置)
File f1 = new File(“./src/log4j2.xml”);
1.File对象是否存在 – exist()
Log.ROOT_LOG.info(“文件存在的情况: ” + f1.exist());

2.文件的大小(单位为B) – length()
Log.ROOT_LOG.info(“文件大小为: ” + f1.length());

3.空间有关的方法
以桌面为例:
File df = new File(“/Users/**(填你电脑的名字)/Desktop”);
1).总空间大小 – getTotalSpace()
Log.ROOT_LOG.info(“总空间: ” + df.getTotalSpace());
2).空余空间大小 – getFreeSpace()
Log.ROOT_LOG.info(“空余空间: ” + df.getFreeSpace());
3).可用空间大小 – getUsableSpace()
Log.ROOT_LOG.info(“可用空间: ” + df.getUsableSpace());

4.相关判断
1).是否是文件夹 – isDirectory()
Log.ROOT_LOG.info(“桌面是文件夹吗? ” + df.isDirectory());
2).是否为文件 – isFile()
Log.ROOT_LOG.info(“log4j2.xml是文件吗? ” + f1.isFile());
3).是否为隐藏文件 – isHidden()
同样是用File创建出来的对象.isHidden使用该方法
4).是否是绝对路径 – isAbsolute()
Log.ROOT_LOG.info(“桌面是否是绝对路径获取? ” + df.isAbsolute());

5.文件本身的操作
1).获取文件名 – getName()
Log.ROOT_LOG.info(“f1的文件名为: ” + f1.getName());
2).文件全名(路径信息) – getAbsolutePath()
Log.ROOT_LOG.info(“f1的路径名为: ” + f1.getAbsolutePath());
3).获取父级名 – getParent() 和 获取父级File名 – getParentFile()
Log.ROOT_LOG.info(“f1的父级名: ” + f1.getParent());
Log.ROOT_LOG.info(“f1的父级File为: ” + f1.getParentFile());

三.File类的基础操作

1.创建文件 – createNewFile()
步骤:
1).获取存放的文件的路径
2).确定所创文件的文件名(有无后缀名)
3).创建目标文件
按照步骤写:

String path = "file03"; // 存放文件的路径
String name1 = "new1"; // 无后缀名的文件
String name2 = "new1.txt"; // 有后缀名的文件
// 使用File(File parent , String child)创建文件实例
File f1 = new File(path , "new1");// 创建无后缀名的文件实例
File f2 = new File(path , "new1.txt"); // 创建有后缀名的文件实例
boolean res = false;
try{
    // 可能会创建失败,所以需要try...catch...
    res = f1.createNewFile();
    res = f2.createNewFile();
}catch(IOException e){
    Log.FILE_LOG.warn("IOException:文件创建失败");
}
Log.ROOT_LOG.info("文件创建情况: " + res);

2.创建文件夹 – mkdir()
步骤:
1).获取存放的文件夹的路径
2).确定创建文件夹的名称(有无后缀名)
3).创建目标文件夹

String name3 = "King";// 无后缀的文件夹
String name4 = "queen.big";// 有后缀名的文件夹
// 使用File(File parent , String child)创建文件实例
File f3 = new File(path , "King");// 创建无后缀名的文件夹实例
File f4 = new File(path , "queen.big");// 创建有后缀名的文件夹实例
Log.ROOT_LOG.info("f3创建情况: " + f3.mkdir());
Log.ROOT_LOG.info("f4创建情况: " + f4.mkdir());

注意:文件 和 文件夹 创建时:
1).如果能创建,且目标不存在时,则会创建成功
2).如果不能创建,且目标存在时,则会创建失败

3.多层文件夹的创建 – makeDirs()
①.使用系统方法

File f5 = new File(path , "a/b/c");
Log.ROOT_LOG.info("多层文件夹的创建: " + makeDirs(f5));

②.使用递归
先直接创建本身,如果不能创建 -> 就优先创建本身的父级,在回头创建本身 - > 如果创建不了,重复操作

private static File makedir(File file){
    // 如果文件夹存在 直接返回
    if(file.exist()){
        return false;
    }
    // 优先处理父级文件夹
    // 如果父级文件夹也存在 也会被上一步骤的安全处理返回
    makedir(file.getParentFile);
    // 经过上一步骤父级一定能创建成功 所以可直接创建本身
    return file.mkdir();
}

File f5 = new File(path , "a/b/c");
Log.ROOT_LOG.info("多层文件夹创建情况: " + makedir(f5));

4.创建多层文件夹下的目标文件
步骤:
1).如果本身文件已经存在,直接返回
2).如果本身文件夹如果存在,直接创建目标文件
3).如果不存在,就先创建父级的文件夹(们),在创建本身

private static boolean makeFile(File file){
    // 如果存在直接返回false
    if(file.exist()){
        return false;
    }
    File parent = file.getParentFile();
    // 已经处理了Parent存在的情况
    parent.mkdirs();
    try{
        return file.createNewFile();
    }catch(IOException e){
        Log.FILE_LOG.warn("IOException: " + e.getMessage());
        return false;
    }
}

File f6 = new File(path , o/p/q/1.txt);
Log.ROOT_LOG.info("多层文件夹下的文件创建: " + makeFile(f6));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值