Java 文件常用操作与流转换

🚀 作者主页: 有来技术

🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot

🌺 仓库主页: Gitee 💫 Github 💫 GitCode

💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正!

目录

  • 文件基本操作
  • [InputStream 和 BufferedImage 相互转换](#InputStream 和 BufferedImage 相互转换)
    • [InputStream 转 BufferedImage](#InputStream 转 BufferedImage)
    • [BufferedImage 转 InputStream](#BufferedImage 转 InputStream)
  • [URL 转 InputStream](#URL 转 InputStream)
  • [InputStream 和 File 相互转换](#InputStream 和 File 相互转换)
    • [InputStream 转 File](#InputStream 转 File)
    • [File 转 InputStream](#File 转 InputStream)
  • [File 和 MultipartFile 相互转换](#File 和 MultipartFile 相互转换)
    • [File 转 MultipartFile](#File 转 MultipartFile)
    • [MultipartFile 转 File](#MultipartFile 转 File)

文件基本操作

创建文件

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

java 复制代码
File file = new File("example.txt");

从文件读取数据

使用 FileInputStream 读取文件内容:

java 复制代码
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 写入数据到文件:

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

文件复制

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

java 复制代码
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 编码:

java 复制代码
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

java 复制代码
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

java 复制代码
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 关联的输入流。

java 复制代码
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 中的数据复制到文件:

java 复制代码
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

java 复制代码
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 对象,并将文件的内容填充到其中。

java 复制代码
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

java 复制代码
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 对象中。要确保在使用完毕后适当地关闭流。

相关推荐
PythonFun17 分钟前
Python批量下载PPT模块并实现自动解压
开发语言·python·powerpoint
Death20020 分钟前
Qt 6 相比 Qt 5 的主要提升与更新
开发语言·c++·qt·交互·数据可视化
机器视觉知识推荐、就业指导23 分钟前
使用Qt实现实时数据动态绘制的折线图示例
开发语言·qt
快乐就好ya1 小时前
Java多线程
java·开发语言
IT学长编程1 小时前
计算机毕业设计 二手图书交易系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·二手图书交易系统
CS_GaoMing2 小时前
Centos7 JDK 多版本管理与 Maven 构建问题和注意!
java·开发语言·maven·centos7·java多版本
艾伦~耶格尔2 小时前
Spring Boot 三层架构开发模式入门
java·spring boot·后端·架构·三层架构
man20172 小时前
基于spring boot的篮球论坛系统
java·spring boot·后端
2401_858120533 小时前
Spring Boot框架下的大学生就业招聘平台
java·开发语言
S hh3 小时前
【Linux】进程地址空间
java·linux·运维·服务器·学习