Java 文件常用操作与流转换

news2024/11/29 19:40:26

🚀 作者主页: 有来技术
🔥 开源项目: 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.coloradmin.cn/o/1256163.html

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

相关文章

监控同一局域网内其它主机上网访问信息

1.先取得网关IP 2.安装IPTABLES路由表 sudo apt-get install iptables 3.启用IP转发 sudo sysctl -p 查看配置是否生效 4.配置路由 iptables -t nat -A POSTROUTING -j MASQUERADE 配置成功后,使用sudo iptables-save查看

Linux进程通信——信号量

概念 信号量(semaphore) 与已经介绍过的 PC 结构不同,它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。 特点 1.信号量用于进程间同步,若要在进程间传递数据需要结合共享内存 2.信号量基于操作系统的 PV…

C语言线性表的链式存储(框架)

线性表的链式存储 线性表的顺序存储:用一块连续的内存空间 线性表的链式存储:不连续的内存空间 链表是由一系列的节点组成,每个节点包含两个域,一个是数据域,一个是指针域 链表的插入和删除原理 单项链表框架的搭建 …

交换机配置与管理

文档以国产迈普交换机为例,各厂家交换机配置有少许不同,仅供参考。 交换机命令行模式: 普通用户模式Hostname>() exit 输入enable命令 特权用户模式Hostname#() exit 输入configu…

业务流程图是什么,怎么画?

业务流程图是一种展示企业内部流程和工作流程的图表,通常以图表的形式呈现。业务流程图用图像化的方式展示组织内部的各种活动,每个操作环节被展示为流程图的一个框,一般包括输入/输出、任务和活动等元素。 业务流程图的使用场景 业务流程…

深入理解JVM虚拟机第二十六篇:详解JVM当中的虚方法和非虚方法,并从字节码指令的角度去分析虚方法和非虚方法

😉😉 学习交流群: ✅✅1:这是孙哥suns和树哥给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783824 📚​​​​​​​📚 微信:DashuDeveloper拉你进微信群,免费领取! 一:非虚方法和虚方法 方法…

OpenGL的学习之路 -5

1.视景体 正交投影 人眼看世界,有一个可见范围。范围内可见,范围外不可见。视景体就是这么一个概念。 (上图仅学习记录用) 在OGL中,有两种投影方式,对应两种视景体。第一种,正交投影&#xf…

声音响度、声压级计权(A B C)实现

声压 sound pressure 声压就是大气压受到声波扰动后产生的变化,即为大气压强的余压,它相当于在大气压强上的叠加一个声波扰动引起的压强变化。由于声压的测量比较容易实现,通过声压的测量也可以间接求得质点速度等其它物理量,所以…

人工智能入门教学——AI代理(AI Agent)

目录 一、简介 二、特征 三、结构 四、工作流程 五、类型 六、应用 一、简介 AI代理 (Artificial Intelligence Agent)是指使用人工智能技术和算法来执行特定任务、解决问题或实现目标的程序或系统。这些代理可以是简单的程序,也可以是复杂的系统&#xff0c…

学生党福音!一个能自定义词库的单词软件--单词魔方

大家好 我是Yhen 这一期给大家介绍一款自制的单词软件–单词魔方 文章目录 一.创作缘由二.功能介绍&升级内容三.使用方法四.程序获取 一.创作缘由 为什么会有想法开发这个单词软件呢? 因为平时自己在做阅读,看电影时积累下来了一些单词 当我想要系…

Spring Cache(缓存框架)

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

C++ libcxxabi中dynamic_cast 实现

摘要:最近在看一个崩溃的过程中详细看了一遍cxxabi的定义,就想着看一些llvm中cxxabi的一些实现。本文描述了cxxabi中dynamic_cast的实现以及原理。   关键字:cxxabi,dynamic_cast 1 简介 C中,dynamic_cast用于有虚函数的继承链…

Linux系统管理:WinSCP 安装与使用

目录 一、实验 1.下载WinSCP 2.安装WinSCP 3.使用WinSCP 一、实验 1.下载WinSCP (1)地址 Downloading WinSCP-6.1.2-Setup.exe :: WinSCP 2.安装WinSCP (1)选择安装程序模式 (2)点击 (3…

vite-性能优化-构建优化-cnd加速优化

CDN 加速优化 - 感觉用不大到 主要作用 : 将引入的依赖,打包部署后,在用户访问的时候, 通过网络CDN的方式进行加载,而非直接从你自己的服务器上加载。优点 : 1、直接降低了你自己的打包的体积&#xff0c…

基于helm的方式在k8s集群中部署gitlab - 部署(一)

文章目录 1. 背景说明2. 你可以学到什么?3. 前置条件4. 安装docker服务(所有节点)5. 部署k8s集群5.1 系统配置(所有节点)5.2 安装kubelet组件(所有节点)5.2.1 编写kubelet源5.2.2 安装kubelet5.2.3 启动kubelet 5.3 集…

2023nacos源码解读第4集——整体了解nacos源码模块

文章目录 1、类Linux tree的windows treee工具2、源码目录结构3、模块依赖关系 1、类Linux tree的windows treee工具 windows 自带的tree 不够用,使用node npm安装一个类Linux 的treee npm install -g cnpm --registryhttps://registry.npm.taobao.org npm config…

MySQL 8 手动安装后无法启动的问题解决

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,(…

springframe工程导入

配置gradle工程 init.d 目录下新建init.gradle allprojects {repositories {mavenLocal()maven {allowInsecureProtocol trueurl https://maven.aliyun.com/nexus/content/repositories/central/}} } 报错Plugin [id: org.jetbrains.dokka, version: 0.10.1, apply: false] w…

Python集合类型

目录 目标 版本 官方文档 集合分类 实战 创建 循环 常用方法 目标 掌握set和frozenset两种集合的使用方法,包括:创建、交集、并集、差集等操作。 版本 Python 3.12.0 官方文档 Set Types — set, frozensethttps://docs.python.org/3/library/s…

常见指令的数据通路和执行过程

作此篇的原因是17年19题: 本题选A,做的时候总感觉不够通透,因此把这题涉及到的内容全部看了一遍,顿时没有那种朦胧感了 零、五段式流水线: 以下均为MIPS设定:指令长度为32位,主存按字节编址&a…