From bf5386712cb47e2466f60a25e111eb7397b5b933 Mon Sep 17 00:00:00 2001 From: Patrick Strawderman Date: Wed, 28 Jan 2026 10:13:03 -0600 Subject: [PATCH] Use Java Files utilities in FileCopyUtils Use helpers from java.nio.file.Files for some methods in FileCopyUtils. Additionally, add unit tests for the various file-related methods. Signed-off-by: Patrick Strawderman --- .../springframework/util/FileCopyUtils.java | 5 ++-- .../util/FileCopyUtilsTests.java | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/util/FileCopyUtils.java b/spring-core/src/main/java/org/springframework/util/FileCopyUtils.java index fcfea916de9..8a03cd511b4 100644 --- a/spring-core/src/main/java/org/springframework/util/FileCopyUtils.java +++ b/spring-core/src/main/java/org/springframework/util/FileCopyUtils.java @@ -16,7 +16,6 @@ package org.springframework.util; -import java.io.ByteArrayInputStream; import java.io.Closeable; import java.io.File; import java.io.IOException; @@ -76,7 +75,7 @@ public abstract class FileCopyUtils { public static void copy(byte[] in, File out) throws IOException { Assert.notNull(in, "No input byte array specified"); Assert.notNull(out, "No output File specified"); - copy(new ByteArrayInputStream(in), Files.newOutputStream(out.toPath())); + Files.write(out.toPath(), in); } /** @@ -87,7 +86,7 @@ public abstract class FileCopyUtils { */ public static byte[] copyToByteArray(File in) throws IOException { Assert.notNull(in, "No input File specified"); - return copyToByteArray(Files.newInputStream(in.toPath())); + return Files.readAllBytes(in.toPath()); } diff --git a/spring-core/src/test/java/org/springframework/util/FileCopyUtilsTests.java b/spring-core/src/test/java/org/springframework/util/FileCopyUtilsTests.java index 4f24a6df213..65e5662f22e 100644 --- a/spring-core/src/test/java/org/springframework/util/FileCopyUtilsTests.java +++ b/spring-core/src/test/java/org/springframework/util/FileCopyUtilsTests.java @@ -21,9 +21,12 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Arrays; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import static org.assertj.core.api.Assertions.assertThat; @@ -87,4 +90,29 @@ class FileCopyUtilsTests { assertThat(result).isEqualTo(content); } + @Test + void copyFile(@TempDir Path tempDir) throws IOException { + Path source = tempDir.resolve("src"); + Path target = tempDir.resolve("target"); + Files.write(source, "content".getBytes()); + int bytesWritten = FileCopyUtils.copy(source.toFile(), target.toFile()); + assertThat(bytesWritten).isEqualTo(7); + assertThat(target).exists(); + assertThat(target).content().isEqualTo("content"); + } + + @Test + void copyFileToByteArray(@TempDir Path tempDir) throws IOException { + Path source = tempDir.resolve("src"); + Files.write(source, "content".getBytes()); + assertThat(FileCopyUtils.copyToByteArray(source.toFile())).asString().isEqualTo("content"); + } + + @Test + void copyByteArrayToFile(@TempDir Path tempDir) throws IOException { + Path target = tempDir.resolve("target"); + FileCopyUtils.copy("content".getBytes(), target.toFile()); + assertThat(target).exists(); + assertThat(target).content().isEqualTo("content"); + } }