文件基本操作
创建文件
使用 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
使用 ByteArrayOutputStream 将 BufferedImage 转换为 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 和 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 对象中。要确保在使用完毕后适当地关闭流。