Java 文件常用操作与流转换

🚀 作者主页: 有来技术
🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot
🌺 仓库主页: Gitee 💫 Github 💫 GitCode
💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正!

在这里插入图片描述

目录

  • 文件基本操作
    • 创建文件
    • 从文件读取数据
    • 写入数据到文件
    • 文件复制
    • 文件转 Base64
  • InputStream 和 BufferedImage 相互转换
    • InputStream 转 BufferedImage
    • BufferedImage 转 InputStream
  • URL 转 InputStream
  • InputStream 和 File 相互转换
    • InputStream 转 File
    • File 转 InputStream
  • File 和 MultipartFile 相互转换
    • File 转 MultipartFile
    • MultipartFile 转 File

文件基本操作

创建文件

使用 File 类可以轻松创建文件对象:

File file = new File("example.txt");

从文件读取数据

使用 FileInputStream 读取文件内容:

try (FileInputStream fis = new FileInputStream("example.txt")) {int data;while ((data = fis.read()) != -1) {// 处理每个字节的操作System.out.print((char) data);}
} catch (IOException e) {e.printStackTrace();
}

写入数据到文件

使用 FileOutputStream 写入数据到文件:

try (FileOutputStream fos = new FileOutputStream("output.txt")) {byte[] data = "Hello, FileOutputStream!".getBytes();fos.write(data);
} catch (IOException e) {e.printStackTrace();
}

文件复制

使用 Files 类的 copy 方法可以实现文件的复制:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.IOException;Path sourcePath = Paths.get("source.txt");
Path targetPath = Paths.get("target.txt");try {Files.copy(sourcePath, targetPath);
} catch (IOException e) {e.printStackTrace();
}

文件转 Base64

使用 Java 8 的 Base64 类可以方便地将文件转换为 Base64 编码:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;Path filePath = Paths.get("example.txt");try {byte[] fileBytes = Files.readAllBytes(filePath);String base64String = Base64.getEncoder().encodeToString(fileBytes);System.out.println(base64String);
} catch (IOException e) {e.printStackTrace();
}

InputStream 和 BufferedImage 相互转换

BufferedImage 是什么?

BufferedImage 是 Java 中用于表示图像的类,它继承了 Image 类。与 Image 不同,BufferedImage 直接提供了对图像数据的操作,如读写像素值。这使得 BufferedImage 更适用于图像处理和分析。

与 InputStream 的区别:

InputStream 是字节流的抽象类,用于从各种数据源读取字节。而 BufferedImage 是 Java 中处理图像的类,提供了更高层次的图像操作。在图像处理中,通常使用 InputStream 从数据源读取图像二进制数据,然后通过 ImageIO.read 转换为 BufferedImage 进行进一步的处理。

InputStream 转 BufferedImage

使用 ImageIO 类的 read 方法可以将 InputStream 转换为 BufferedImage

import javax.imageio.ImageIO;
import java.io.IOException;
import java.io.InputStream;
import java.awt.image.BufferedImage;public class InputStreamToBufferedImage {public static BufferedImage convert(InputStream inputStream) throws IOException {return ImageIO.read(inputStream);}
}

BufferedImage 转 InputStream

使用 ByteArrayOutputStreamBufferedImage 转换为 InputStream

import javax.imageio.ImageIO;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.awt.image.BufferedImage;public class BufferedImageToInputStream {public static InputStream convert(BufferedImage bufferedImage) throws IOException {ByteArrayOutputStream outputStream = new ByteArrayOutputStream();ImageIO.write(bufferedImage, "png", outputStream);return new ByteArrayInputStream(outputStream.toByteArray());}
}

URL 转 InputStream

java.net.URL 类提供了从指定 URL 打开连接并获取输入流的方法。这对于从网络获取数据是非常常见的操作。在示例中,通过 url.openStream() 方法获取了与指定 URL 关联的输入流。

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;public class UrlToInputStreamExample {public static InputStream convert(String urlString) throws IOException {URL url = new URL(urlString);return url.openStream();}
}

InputStream 和 File 相互转换

InputStream 转 File

使用 Files 类的 copy 方法可以将 InputStream 中的数据复制到文件:

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;public class InputStreamToFileExample {public static void convert(InputStream inputStream, String filePath) throws IOException {Path targetPath = Paths.get(filePath);Files.copy(inputStream, targetPath, StandardCopyOption.REPLACE_EXISTING);}
}

File 转 InputStream

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class FileToInputStreamExample {public static InputStream convert(File file) throws IOException {return new FileInputStream(file);}
}

File 和 MultipartFile 相互转换

File 转 MultipartFile

在 Spring 框架中,MultipartFile 通常用于处理文件上传。在这个例子中,使用 MockMultipartFile 类来模拟文件上传,创建一个 MultipartFile 对象,并将文件的内容填充到其中。

import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class FileToMultipartFileExample {public static MultipartFile convert(File file) throws IOException {FileInputStream input = new FileInputStream(file);return new MockMultipartFile("file", file.getName(), "text/plain", input);}
}

MultipartFile 转 File

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.web.multipart.MultipartFile;public class MultipartFileToFileExample {public static File convert(MultipartFile multipartFile, String filePath) throws IOException {File file = new File(filePath);try (FileOutputStream fos = new FileOutputStream(file);InputStream inputStream = multipartFile.getInputStream()) {byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = inputStream.read(buffer)) != -1) {fos.write(buffer, 0, bytesRead);}}return file;}
}

在这个示例中,MultipartFile 的内容被写入到一个新的 File 对象中。要确保在使用完毕后适当地关闭流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/173182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端项目部署自动检测更新后通知用户刷新页面(前端实现,技术框架vue、js、webpack)——方案一:编译项目时动态生成一个记录版本号的文件

前言 当我们重新部署前端项目的时候,如果用户一直停留在页面上并未刷新使用,会存在功能使用差异性的问题,因此,当前端部署项目后,需要提醒用户有去重新加载页面。 技术框架 vue、js、webpack 解决方案 编译项目时动…

内网隧道学习

默认密码:hongrisec2019 一.环境搭建 网卡学习 一个网卡一个分段,想象成一个管道 192.168.52一段 192.168.150一段 仅主机模式保证不予外界连通,保证恶意操作不会跑到真实机之上 52段是内部通信,150段属于服务器(…

PC8231(CC/CV)5V/2.4A同步降压芯片 频率可调 限流欠压补偿

一.概述 PC8231 是一款同步降压转换器, 该转换器可驱动输出 2.4A 负载电流。 设计允许 PC8231 在 9V 到40V 宽输入电压范围内工作。通过将 COMP/EN 引脚逻辑电平拉低来实现外部关断功能,并进入待机模式。外部补偿使反馈控制环路具有良好的线…

CRM的智能招投标对企业有什么意义?

如今CRM系统的生态系统越来越壮大,这些工具的集成极大地丰富了CRM系统的应用场景,例如CRM系统集成企业微信等社交媒体为获客提供便利;再比如CRM集成ChatGPT提高邮件内容质量,对于经常接触招投标项目的业务人员来说,在C…

英特尔工作站:助力专业用户实现高效创作

原创 | 文 BFT机器人 英特尔工作站是由全球知名的英特尔公司设计和开发的一款计算平台。英特尔在工作站处理器领域将其产品分为性能型和移动型两类,它的诞生旨在满足专业用户在科学、工程、设计等领域对高性能计算的需求。英特尔工作站配备了最新的英特尔处理器、大…

EI期刊论文复现:考虑电动汽车可调度潜力的充电站两阶段市场投标策略程序代码!

本程序代码参考EI期刊论文《考虑电动汽车可调度潜力的充电站两阶段市场投标策略》,程序中基于历史数据评估可调度潜力,由联合报价模型确定节点边际电价,作为报价的参考,包含个体竞价模式,纳什博弈竞价,算例…

docker (简介、dcoker详细安装步骤)- day01

一、 为什么出现 Docker是基于Go语言实现的云开源项目。 Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应…

Git远程仓库常用开发命令和理解

远程仓库 创建与合并分支 每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。 HEAD严格来说不是指向提交,而…

01.vue3大事件——项目初始化、技术介绍

后台数据管理系统 - 项目架构设计 在线演示:https://fe-bigevent-web.itheima.net/login 接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 接口根路径: http://big-event-vue-api-t.itheima.net 本项…

工作流能实现自动化吗?应该用什么工具?

研究显示,CRM系统工作流自动化软件不仅能简化冗余的工作且不需要监控和指导就能提高员工的工作效率。企业需要工作流自动化软件吗?答案是肯定的,工作流自动化的好处有哪些? 为什么企业需要工作流自动化软件 每家企业都希望降本增…

企业营销管理能够实现自动化吗?怎么做?

当今企业面临着越来越多的营销难题:如何有效培育潜在客户、如何提高营销活动的效果、如何优化营销资源的分配......企业的营销管理怎么做?或许CRM系统营销自动化会起到作用。 客户细分: 企业可以通过CRM的客户细分功能,根据客户…

内衣洗衣机和手洗哪个干净?最好用的迷你洗衣机

随着大家工作的压力越来越大,下了班之后只能想躺平,在洗完澡之后看着还需要手洗的内衣裤真的很头疼。有些小伙伴还有会攒几天再丢进去洗衣机里面一起,而且这样子是非常不好的,用过的内衣裤长时间不清洗容易滋生细菌,而…

单片机学习3——数码管

数码管,根据内部结构,可分为共阴极数码管和共阳极数码管。七段发光管加上一个小数点,共计8段。因此,我们对它编程的时候,刚好是用一个字节。 数码管的显示方式: 1)静态显示; 2&…

QT网络协议知识体系(一)

//获取主机的名称和ip地址 //获取主机的所有信息

终于等到你!常用的组织架构图模板,高清图片一键导出

组织架构图是一种用来展示一个组织内部人员和职责关系的图表。通过组织架构图,我们可以清晰地了解一个组织的层级架构和各个部门之间的关系。在本文中,我们将向大家推荐8个常用的组织架构图模板,帮助你快速制作出专业的组织架构图。 1. 市场营…

解决Linux Visual Studio Code显示字体有问题/Liunx下Visual Studio Code更换字体

01、具体问题 在Linux下VsCode控制台与代码区显示异常,如下图所示: 代码显示 终端显示 02、解决方案 下载字体 [rootlocalhost mhzzj]$ cd /usr/share/fonts # 进入目录 [rootlocalhost fonts]$ sudo yum install git # 下载字体 [rootlocalhost fo…

React入门使用 (官方文档向 Part1)

文章目录 React组件:万物皆组件 JSX: 将标签引入 JavaScriptJSX 规则1. 只能返回一个根元素2. 标签必须闭合3. 使用驼峰式命名法给 ~~所有~~ 大部分属性命名!高级提示:使用 JSX 转化器 在 JSX 中通过大括号使用 JavaScript使用引号传递字符串使用大括号&…

招投标信息可以用CRM系统来查看吗?

对于B2B企业来说获客难、获客成本高是共识。做大客户的企业通过招投标获取商机是一个重要获客途径,然而传统方式管理招投标信息问题很多,例如资料丢失、手工录入出错、信息分散、信息查找费时费力。为了解决这些难题小编推荐CRM系统,CRM系统需…

Java基础之集合类

Java基础之集合类 一、集合的框架1.1、集合概述1.2、集合与数组区别1.3、数组的缺点:1.4、常用集合分类1.5、Collection常用方法 二、List集合2.1、ArrayList2.2、LinkedList2.3、Vector2.4、区别 三、Set集合3.1、HashSet集合3.2、LinkedHashSet集合3.3、TreeSet集…

Qt 网络通信

获取本机网络信息 &#xff08;1&#xff09;在 .pro 文件中加入 QT network&#xff08;2&#xff09; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QLabel> #include <QLineEdit> #include <QPu…