Java 文件常用操作与流转换

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

Java 文件常用操作与流转换_第1张图片

目录

  • 文件基本操作
    • 创建文件
    • 从文件读取数据
    • 写入数据到文件
    • 文件复制
    • 文件转 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 对象中。要确保在使用完毕后适当地关闭流。

你可能感兴趣的:(#,Java,java,开发语言)