🚀 作者主页: 有来技术
🔥 开源项目: 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
使用 ByteArrayOutputStream
将 BufferedImage
转换为 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
对象中。要确保在使用完毕后适当地关闭流。