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

相关推荐
程序媛-徐师姐9 分钟前
Java 基于SpringBoot+vue框架的老年医疗保健网站
java·vue.js·spring boot·老年医疗保健·老年 医疗保健
yngsqq10 分钟前
c#使用高版本8.0步骤
java·前端·c#
流星白龙13 分钟前
【C++习题】10.反转字符串中的单词 lll
开发语言·c++
尘浮生20 分钟前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
MessiGo21 分钟前
Python 爬虫 (1)基础 | 基础操作
开发语言·python
小白不太白95024 分钟前
设计模式之 模板方法模式
java·设计模式·模板方法模式
Tech Synapse26 分钟前
Java根据前端返回的字段名进行查询数据的方法
java·开发语言·后端
xoxo-Rachel33 分钟前
(超级详细!!!)解决“com.mysql.jdbc.Driver is deprecated”警告:详解与优化
java·数据库·mysql
乌啼霜满天24935 分钟前
JDBC编程---Java
java·开发语言·sql