Java代码中对文件的操作

2023-10-29

引言

这几天的项目涉及到了文件的操作,我这边做一下整理

环境说明

jdk版本:1.8.0_311

对文件的操作

1、保存文件

/**
 * 保存文件
 *
 * @param file 文件
 * @param path 文件保存目录
 * @param name 保存后的文件名字
 */
public void saveFile(MultipartFile file, String path, String name) throws Exception {
    if (file == null) {
        throw new Exception("请上传有效文件!");
    }
    // 若目录不存在则创建目录
    File folder = new File(path);
    if (!folder.exists()) {
        folder.mkdirs();
    }

    // 生成文件,folder为文件目录,newName为文件名
    file.transferTo(new File(folder, name));
}

2、删除文件

/**
 * 删除指定目录下的指定文件
 *
 * @param path 文件路径(路径结尾不带“/”)
 * @param name 文件名称
 */
public void delFile(String path, String name) {
    File file = new File(path + "/" + name);
    file.delete();
}

3、删除指定的空目

/**
 * 删除指定的空目录,如果往上2层的目录也是空的,则一起删除
 *
 * @param path 目录路径(路径结尾不带“/”)
 */
public void delBlankDir(String path) {
    for (int i = 0; i < 3; i++) {
        File dirFile = new File(path);
        if (dirFile.length() == 0) {
            dirFile.delete();
            path = path.substring(0, path.lastIndexOf("/"));
        } else {
            break;
        }
    }
}

4、验证文件是否是MP3格式

/**
 * 验证是否是MP3格式的文件
 *
 * @param multipartFile 验证的文件
 * @return true:是MP3、false:不是MP3
 */
public boolean isMP3File(MultipartFile multipartFile) {
    try {
        byte[] headerBytes = new byte[4];
        multipartFile.getInputStream().read(headerBytes);
        if (headerBytes[0] == (byte) 0x49 && headerBytes[1] == (byte) 0x44 &&
                headerBytes[2] == (byte) 0x33) {
            return true;
        }
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
    return false;
}

5、音频格式转换

/**
 * 音频文件格式转换
 *
 * @param fpath  需要转换的音频文件路径
 * @param target 转换后的音频文件路径
 */
public void transferAudioPcm(String fpath, String target) {
    List<String> commend = new ArrayList<>();
    String path = "";
    if (SystemUtils.isLinux()) {
        path = "修改成Ffmpeg文件的路径";
    } else if (SystemUtils.isWindows()) {
        path = "修改成Ffmpeg文件的路径";
    }
    commend.add(path);
    commend.add("-y");
    commend.add("-i");
    commend.add(fpath);
    commend.add("-f");
    commend.add("s16le");
    commend.add("-ar");
    commend.add("4000");
    commend.add("-ac");
    commend.add("-1");
    commend.add(target);
    try {
        ProcessBuilder builder = new ProcessBuilder();
        builder.command(commend);
        Process p = builder.start();
        p.waitFor();
        p.destroy();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

6、改变linux系统下的文件权限

/**
 * 改变linux系统下的文件权限
 *
 * @param mod  修改后的权限
 * @param path 文件路径
 */
public void changePermission(String mod, String path) throws Exception {
    // ProcessBuilder processBuilder = new ProcessBuilder("chmod", "775", "/data/a.txt");
    ProcessBuilder processBuilder = new ProcessBuilder("chmod", mod, path);
    Process process = processBuilder.start();
    int exitCode = process.waitFor();
    if (exitCode == 0) {
        System.out.println("File permission changed successfully!");
    } else {
        System.out.println("Failed to change file permission.");
    }
}

7、查询服务器磁盘空间

/**
 * 查询服务器磁盘空间
 *
 * @return map
 */
public Map<String, String> getDiskInfo() {
    // 总空间
    long totalSpace = 0;
    // 已用空间
    long usableSpace = 0;
    // 可用空间
    long unallocatedSpace = 0;
    for (FileStore fileStore : FileSystems.getDefault().getFileStores()) {
        try {
            totalSpace += fileStore.getTotalSpace();
            usableSpace += fileStore.getUsableSpace();
            unallocatedSpace += fileStore.getUnallocatedSpace();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    DecimalFormat decimalFormat = new DecimalFormat("#.00");
    Map<String, String> map = new HashMap<>(3);
    map.put("totalSpace", decimalFormat.format(totalSpace / (1024.0 * 1024 * 1024)));
    map.put("usableSpace", decimalFormat.format(usableSpace / (1024.0 * 1024 * 1024)));
    map.put("unallocatedSpace", decimalFormat.format(unallocatedSpace / (1024.0 * 1024 * 1024)));
    return map;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java代码中对文件的操作 的相关文章

随机推荐

  • Hololens 学习-----1

    ww 学习资料 基本操作 链接 https learn microsoft com zh cn hololens hololens2 basic usage 链接 https learn microsoft com zh cn window
  • Java中Collection集合和Map集合详解(进阶三)

    目录 友情提醒 第一部分 单列集合 第一章 单列集合体系 Collection接口 1 1 单列集合是什么 与数组的区别在哪 1 2 单列集合体系与分类 第二章 单例集合体系Collection下的List接口 Set接口 2 0 List
  • JAVA随机生成十个不重复的整数(Arraylist,Set)

    随机生成十个不重复的整数有许多方法 这里我只写出两种 第一种 Set 先上代码 import java util HashSet import java util Set public class Demo01 public static
  • (Java)leetcode-337 House Robber III(打家劫舍III)

    题目描述 在上次打劫完一条街道之后和一圈房屋后 小偷又发现了一个新的可行窃的地区 这个地区只有一个入口 我们称之为 根 除了 根 之外 每栋房子有且只有一个 父 房子与之相连 一番侦察之后 聪明的小偷意识到 这个地方的所有房屋的排列类似于一
  • CAN芯片_ TJA1051T/3

    前不久画了块板子 STM32F407VET6加CAN芯片的 如下图 这个电路是从正点原子抄过来的 但是板子打出来发现用不了 换上正点原子STM32F429开发板上的CAN芯片后就能正常工作了 仔细观察后发现两个芯片不太一样 我们买的是TJA
  • Windows 10 安装 PostgreSQL 12.x 报错 ‘psql‘ 不是内部或外部命令 & 由于找不到文件libintl-9.dll等问题

    目录 序言 一 问题总结 问题 1 psql 不是内部或外部命令 也不是可运行的程序或批处理文件 问题 2 由于找不到文件libintl 9 dll 无法继续执行代码 重新安装程序可能会解决此问题 1 卸载 2 安装 3 安装 Stack
  • 8年经验之谈 —— 35岁以上的测试开发工程师都去哪里了?

    测试开发工程师就是吃青春饭 35岁就是测试开发工程师的天花板 没有工作机会了 测试开发工程师趁早转行 不然迟早失业 网上对测试开发工程师不友好的言论非常多 真的是这样吗 如果不是这样 那么35岁以上的测试开发工程师去哪里了呢 行业内转岗 一
  • 一篇搞定pandas语法,建议收藏

    导语 如果说大数据里面hive是屠龙刀 那么pandas则是倚天剑 帮助我们对数据数据挖掘 数据分析 数据清洗 本篇介绍了Pandas 一些基础的语法 以及使用技巧 建议收藏 目录 数据准备 Dataframe 基础操作 2 1 查看 2
  • Android App保活的方式

    背景 在Android系统中 当应用程序进入后台或者被用户关闭后 系统会自动回收该应用程序的资源 以达到优化系统性能的目的 但是 有些应用程序需要在后台长时间运行 比如音乐播放器 即时通讯等 这时就需要使用一些技术手段来保持应用程序的运行状
  • JAVA实现文件上传

    利用JAVA实现文件上传 Demo01 servlet下的图片上传功能 前端代码 upload html h3 文件上传 h3
  • C#中按位与,按位或

    在工作中遇到按位或组合权限串 一直不是特别明白 今天终于花了半个下午的时间搞明白其中的道理 首先每一个权限数都是2的N次方数 如 k1 2 添加 k2 4 删除 k3 8 修改 如此定义功能权限数 当需要组合权限时 就需要对各个所拥有的权限
  • JavaScript中使用画布实现笑脸火柴人

    在这之前 根本不知道JavaScript具体到底有多重要 现在才明白JavaScript也很强大 从网上看了几个js写的网页小游戏 我都惊呆了 以后一定要好好学习js
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 数据可视化 第4章

    第4章 添加表格QTableView 1 添加table model py 里面子类化QAbstractTableModel 实现自定义table model from PySide2 QtCore import Qt QAbstractT
  • An Introduction to UE4 Plugins

    An Introduction to UE4 Plugins Rate this Article 3 67 3 votes Approved for Versions 4 2 4 3 4 4 4 5 Contents hide
  • <OpenCV> Mat属性

    OpenCV的图像数据类型可参考之前的博客 https blog csdn net thisiszdy article details 120238017 OpenCV Mat类型的部分属性如下 size 矩阵的大小 s i z e
  • VMware虚拟机网络设置(三种网络模式)

    VMware虚拟机网络设置 三种网络模式 VMware网络使用windows虚拟机客户端时一般默认NAT模式自动可以上网 近日安装macos时上网却不行 网上搜索后自己整理出来 对三种模式自己的看法 首先 找到编辑 gt 虚拟网络编辑器 虚
  • k数和

    思路 这道题感觉是一个非常好的动态规划的题目 动态规划方程 d i j target d i 1 j target d i 1 j 1 target a i d i j t a
  • pigz搭配tar开启不了多线程,还是很慢

    Q pigz搭配tar开启不了多线程 还是很慢 A 注意你的压缩的文件夹或文件的名字不要包含 字符 其他字符未尝试
  • Java代码中对文件的操作

    引言 这几天的项目涉及到了文件的操作 我这边做一下整理 环境说明 jdk版本 1 8 0 311 对文件的操作 1 保存文件 保存文件 param file 文件 param path 文件保存目录 param name 保存后的文件名字