1.文件操作基础:获取文件属性

在操作系统中,文件是数据的存储单位,每个文件都有着不同的属性。
我们如何在代码中获取文件的各种属性呢?
下面的学习将让我们掌握这个技能,我们可能会在程序中对文件进行处理的过程中需要用到文件的一些属性。

1.File类的使用

在java编程中,我们可以使用File类来进行文件属性获取
代码实例如下:

package FileCoding.Exa1;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 获取文件属性信息
 */
public class CoreCoding {
    public static void main(String[] args) throws IOException {
        File file=new File("Flag_Feedback.png");
        System.out.println("获得文件名称:"+file.getName());
        System.out.println("获得文件长度(大小):"+file.length()+"byte");
        //获得文件相对路径
        String filePath=file.getPath();
        System.out.println("文件相对路径:"+filePath);
        //获得文件绝对路径
        System.out.println("文件绝对路径:"+file.getAbsolutePath());
        //获得文件的URI路径
        System.out.println("文件URI路径:"+file.toURI());
        //获得文件最后修改日期
        System.out.println("文件最后修改日期:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified())));
        //获得文件是否可读
        System.out.println("文件是否可读:"+file.canRead());
        //获得文件是否可写
        System.out.println("文件是否可写:"+file.canWrite());
        //获取文件是否可执行
        System.out.println("文件是否可执行: "+file.canExecute());
        //获取文件是否隐藏
        System.out.println("文件是否被隐藏:"+file.isHidden());
    }
}

上面的代码中,只要我们在new File()时给的是正确的文件路径,那么我们就可以通过new的FIle对象获取该文件的各种属性。
在这里插入图片描述
注意:File对象的创建有几种方式
在这里插入图片描述

2.在指定目录下查询指定类型的文件

下面的程序展示了如何在指定目录下查询指定后缀的文件。

package FileCoding.Exa1_2;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
 * 扫描获取指定类型的文件集合(只能单层查询)
 */
public class CoreCoding {
    public static void main(String[] args) {
        Object[] result = listFiles(new File("Java动手做一做"),"png");
        assert result != null;
        for (Object file:result){
            File file1=(File)file;
            System.out.println(file1.getName());
        }
    }

    /**
     * 显示文件夹中的文件
     * @param dir 文件夹路径
     * @param extName 文件后缀(文件类型)
     * @return
     */
    private static Object[] listFiles(File dir,String extName) {
        List<File> fileList=new ArrayList<>();
        if (dir == null)
            return null;
        //检查传入的dir是否是路径,
        // 如果不是则直接返回null
        if(!dir.isDirectory()){
            return null;
        }
        //获取目录下所有的文件的数组
        File[] files = dir.listFiles();
        //遍历文件数组
        for (File file : files) {
            if(accept(file,extName)){
                fileList.add(file);
            }
        }
        return fileList.toArray();
    }
    /**
     *
     * @param pathname
     * @param extName
     * @return
     */
    public static boolean accept(File pathname,String extName) {
        // 获取用户设置的指定扩展名
        if (extName == null || extName.isEmpty())
            return false;
        //在后缀前面加一个.
        if (!extName.startsWith("."))
            extName = "." + extName;
        //如果存在大写字母,则转换为小写的
        extName = extName.toLowerCase();
        // 判断扩展名与过滤文件名是否符合要求
        return pathname.getName().toLowerCase().endsWith(extName);
    }
}

在这里插入图片描述

3.文本内容替换功能

package FileCoding.Exa1_3;
import java.io.*;

/**
 * 文件部分内容替换
 */
public class CoreCoding {

    public static void main(String[] args) {
        replaceText(new File("Java动手做一做/Text.txt"),"tama","nima");
    }

    /**
     * 文本替换: 替换指定文件的指定文本
     * @param file 文件对象
     * @param searchText 替换前字符文本
     * @param replaceText 替换后字符文本
     * @return 是否成功
     */
    public static boolean replaceText(File file, String searchText, String replaceText){
        //如果替换前文本为空,直接返回false
        if (searchText.isEmpty()) return false;
        try {
            //创建文件字符输入流
            FileReader fis = new FileReader(file);
            //创建缓冲字符数组
            char[] data = new char[1024];
            int rn = 0;
            //创建字符串构建器
            StringBuilder sb = new StringBuilder();
            //读取文件内容到字符串构建器
            while ((rn = fis.read(data)) > 0) {
                String str = String.valueOf(data, 0, rn);
                sb.append(str);
            }
            //从构建器中生成字符串,并替换搜索文本
            String str = sb.toString().replace(searchText, replaceText);
            //输出替换后的文本到文件
            //创建文件输出流
            FileWriter fOut = new FileWriter(file);
            //把替换完成的字符串写入文件内
            fOut.write(str.toCharArray());
            fOut.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }
}

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员小牧之

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

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

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

打赏作者

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

抵扣说明:

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

余额充值