首页 > 编程语言 >JavaIO 文件的读取,写入,复制,压缩,解压等...相关操作,持续更新

JavaIO 文件的读取,写入,复制,压缩,解压等...相关操作,持续更新

时间:2024-08-30 16:49:35浏览次数:5  
标签:解压 ... return String 文件 param JavaIO path new

1. 文本文件的读取

文本的读取,返回值是一个list, 如果需要返回一整个string 在while循环中使用StringBuilder.append  即可

/**
     * 逐行读取文本
     *
     * @param filePath 文件路径
     * @return List<String>
     */
    public static List<String> readTxtFile1(String filePath) throws IOException {
        Path path = Paths.get(filePath);
        //判断文件是否存在
        if (!Files.exists(path)) {
            log.error("file is not exist");
            return null;
        }
        List<String> txtList = new ArrayList<>();
        try (InputStreamReader read = new InputStreamReader(Files.newInputStream(path), StandardCharsets.UTF_8);
             BufferedReader bufferedReader = new BufferedReader(read)) {
            String lineTxt;
            while (null != (lineTxt = bufferedReader.readLine())) {
                if (StringUtils.isNotEmpty(lineTxt)) {
                    txtList.add(lineTxt);
                }
            }
        }
        return txtList;
    }

2.文本文件的写入

/**
 * 以指定的编码 写入数据
 */
private static void outputStreamWriter(String filePath, List<String> content, Charset charset, boolean append) throws IOException {
    try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(filePath, append), charset);
         BufferedWriter bufferedWriter = new BufferedWriter(writer)) {
        for (String item : content) {
            bufferedWriter.write(item);
            bufferedWriter.newLine();
        }
    }
}

3.文件的拷贝

/**
 * 简单的文件拷贝,不使用缓冲区,适用于小文件
 *
 * @param sourceFile 源文件
 * @param targetFile 目标文件
 */
public static void copyFile(String sourceFile, String targetFile) throws IOException {
    try (FileInputStream fileInputStream = new FileInputStream(sourceFile);
         FileOutputStream fileOutputStream = new FileOutputStream(targetFile)) {
        byte[] b = new byte[1024];
        int length;
        while ((length = fileInputStream.read(b)) != -1) {
            fileOutputStream.write(b, 0, length);
            // 不能用 fileOutputStream.write(b) 因为最后有可能读不够而出错
        }
    }
}

4.大文件的拷贝

/**
 * 进行文件的拷贝-高效
 * 使用字节处理流 字节缓冲输入流和字节缓冲输出流
 *
 * @param source 源
 * @param target 复制到
 * @return boolean 结果
 */
public static boolean BufferedStreamFileCopy(String source, String target) {
    if (StringUtils.isEmpty(source) || StringUtils.isEmpty(target)) {
        log.error("文件路径不存在! path:{}", source);
        return false;
    }

    if (source.equals(target)) {
        log.error("复制的源文件和目标文件不能是同一个文件! path:{}", source);
        return false;
    }

    Path path = Paths.get(source);
    boolean exists = Files.exists(path);
    if (!exists) {
        log.error("文件不存在! path:{}", source);
        return false;
    }
    long currentTimeMillis = System.currentTimeMillis();
    try (BufferedInputStream bufferedInputStream = new BufferedInputStream(Files.newInputStream(path));
         BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(Files.newOutputStream(Paths.get(target)))) {
        byte[] bytes = new byte[1024];
        int length;
        while ((length = bufferedInputStream.read(bytes)) != -1) {
            bufferedOutputStream.write(bytes, 0, length);
        }
        log.info("copy file success, time:{} ms", System.currentTimeMillis() - currentTimeMillis);
        return true;
    } catch (IOException e) {
        log.error("BufferedStreamFileCopy 拷贝文件异常", e);
        return false;
    }
}

5.文本文件编码转换

/**
 * 编码转换- 如一个文件的编码是 gb2312 转为 utf-8
 * 请注意,请用文件本身的正确的编码尝试读取,否则会乱码
 *
 * @param filePath    原始文件
 * @param oldCharset  原始字符编码
 * @param newFilePath 新文件
 * @param newCharset  新字符编码
 * @throws IOException io异常
 */
private static void conversionCharset(String filePath, String oldCharset, String newFilePath, String newCharset) throws IOException {
    try (InputStreamReader reader = new InputStreamReader(Files.newInputStream(Paths.get(filePath)), oldCharset);
         BufferedReader bufferedReader = new BufferedReader(reader);
         OutputStreamWriter outputStreamWriter = new OutputStreamWriter(Files.newOutputStream(Paths.get(newFilePath)), newCharset);
         BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter)) {
        String line;
        while (null != (line = bufferedReader.readLine())) {
            bufferedWriter.write(line);
            bufferedWriter.newLine();
        }
    }
}

标签:解压,...,return,String,文件,param,JavaIO,path,new
From: https://www.cnblogs.com/loveCrane/p/18346500

相关文章

  • 程序员金九银十面试宝典(持续更新中................)
    大家好,我是一位老程序员,分享大家的一路关注的,很久没有更新了,今年大家都很不容易,这里有一份多年来整理的一份Java,大模型,项目管理,Mac软件等各类学习资料及面试题,无论你刚入行的程序员,还是经验丰富IT人士,希望这些资料能帮到你。让我们乘风破浪,顺利拿到理想offer!其它资料在陆陆续续......
  • Php:Call to a member function fetch_all() on bool in ... #0 {main} thrown in ...
    一、软件版本  软件版本:phpstudy_proV8.2.9;二、错误描述  在编写完连接数据库,执行相关的操作的代码之后,在浏览器运行时报如下错误:Fatalerror:UncaughtError:Calltoamemberfunctionfetch_all()onboolinD:\phpstudy_pro\WWW\test2.cc\contact.php:77St......
  • C++基础/C++中的多态(关于虚...)
    C++中的多态(关于虚...)1.前置基础知识1.1对象是如何存储在内存中的#include<iostream>#include<string>classAnimal{private:stringname;intage;public:Animal(std::stringname,intage):name(name),age(age){};~Animal();virtu......
  • C++基础/C++中的多态(关于虚...)
    C++中的多态(关于虚…)1.前置基础知识1.1对象是如何存储在内存中的#include<iostream>#include<string>classAnimal{private:stringname;intage;public:Animal(std::stringname,intage):name(name),age(age){};~Animal();......
  • MD5值修改器 无须安装,解压即用,可修改图片/视频/文件/程序MD5值
    分享一个我一直在用的MD5值修改器给大家,此修改器无须下载,解压即用,操作简单,下面我一步步操作给大家看如何通过修改器修改MD5值1、点击BatchMD5Modify.exe,打开修改器主页打开后的界面是这样的2、点击添加要修改MD5值的视频、图片、文件、程序,并选择打开添加3、点击修改,看......
  • 领域驱动设计(DDD)理解(持续更新...)
    应用服务:可以理解为科室A。聚合:可以理解为小组。聚合1(小组1)、聚合2(小组2)、聚合3(小组3)。组长是聚合根实体,组员是实体。和其他聚合交流(调用),要先通过组长(聚合根实体),组长来找到组员(一般实体)。每个组员可以自己提供领域服务,也可以和其他组员合作领域服务(跨实体领域服务)。尽......
  • k8s集群使用私有仓库通过containerd上传镜像(没解决...)
    查阅资料根据containerd中部分文档https://github.com/containerd/containerd/blob/release/1.5/docs/cri/registry.mdhttps://github.com/containerd/containerd/blob/release/1.5/docs/hosts.mdhttps://blog.csdn.net/u010566813/article/details/125990298最终私有......
  • 7z解压crc错误_7-Zip - 常见问题解答
    7z解压crc错误_7-Zip-常见问题解答7z解压crc错误_7-Zip-常见问题解答1.引言1.17-Zip简介1.2CRC错误概述2.7z文件和CRC错误2.1什么是7z文件2.2CRC错误的定义2.3CRC错误对文件的影响3.常见原因分析3.1文件传输过程中的错误3.2存储介质的损坏3.3不兼容的压......
  • 【HarmonyOS NEXT应用开发】案例69:基于原生能力的压缩与解压缩能力
    一、场景描述概览、常用图片编码格式比对及系统支持情况压缩格式简介系统支持/使用方式zip普及率高,适用范围也最广,压缩速度相比rar快一些ArkTs支持,可通过zlib实现,jsziprarrar格式比zip更能够提供较好的压缩率,但压缩速度也相对慢一些三方库支持,通过Unrar实现......
  • 【解压即玩】最终幻想7 重制版中文+预购特典+全DLC,难忘的一作
    数年前,一家名为神罗的公司(起初称为神罗工程所)发现了一种深埋于地底的神秘生物遗骸(被称为杰诺瓦)以及一种名为“魔晄”的能源。这家公司通过将这种生物遗骸浸泡在魔晄中来生产电力,从而迅速崛起成为全球最大的能源垄断企业。魔晄不仅可以用来发电,还能增强人体的能力,但过量使用......