X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=svjatoslav_commons.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fcommons%2Ffile%2FIOHelper.java;h=e83561a6062b290cafd53cba8e69d5a9e2ea98f9;hp=e7ee659e8b729acb282fe14821e79691487c7176;hb=9bf004ce4e9b5edff36c65fcc8cc0f303390d7fc;hpb=afaa928dd10304ee3e8e6bad3a377ced6a7b2f42 diff --git a/src/main/java/eu/svjatoslav/commons/file/IOHelper.java b/src/main/java/eu/svjatoslav/commons/file/IOHelper.java index e7ee659..e83561a 100755 --- a/src/main/java/eu/svjatoslav/commons/file/IOHelper.java +++ b/src/main/java/eu/svjatoslav/commons/file/IOHelper.java @@ -9,105 +9,99 @@ package eu.svjatoslav.commons.file; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.UnsupportedEncodingException; +import java.io.*; public class IOHelper { - /** - * Deletes files and directories recursively. WARNING!!! Follows symlinks!!! - * - * @param file - * directory to delete with entire contents. - * - * @throws IOException - * if filesystem error happens - */ - public static void deleteRecursively(final File file) throws IOException { - if (file.isDirectory()) { - - for (final File subFile : file.listFiles()) - deleteRecursively(subFile); - - if (!file.delete()) - throw new FileNotFoundException("Failed to delete directory: " - + file); - - return; - } - - if (file.isFile()) - if (!file.delete()) - throw new FileNotFoundException("Failed to delete file: " - + file); - } - - public static byte[] getFileContents(final File file) - throws FileNotFoundException, IOException { - - final byte[] result = new byte[(int) file.length()]; - final FileInputStream fileInputStream = new FileInputStream(file); - fileInputStream.read(result); - fileInputStream.close(); - return result; - } - - public static String getFileContentsAsString(final File file) - throws FileNotFoundException, IOException { - try { - return new String(getFileContents(file), "UTF-8"); - } catch (final UnsupportedEncodingException exception) { - throw new RuntimeException(exception); - } - } - - /** - * Compares new file content with old file content. If content in equal, - * then leaves file as-is. If content differs, then overrides file with the - * new content. - * - * @param file - * file to potentially overwrite - * @param newContent - * new content - * @return true if file was overwritten. - * - * @throws FileNotFoundException - * if file is not found. - * @throws IOException - * if error happens during file IO. - */ - public static boolean overwriteFileIfContentDiffers(final File file, - final byte[] newContent) throws FileNotFoundException, IOException { - - checkForEquality: { - if (file.length() == newContent.length) { - - final byte[] oldContent = getFileContents(file); - - for (int i = 0; i < newContent.length; i++) - if (newContent[i] != oldContent[i]) - break checkForEquality; - - // new file content in identical to old content - return false; - } - } - - // New content differs from existing. Overwrite file. - saveToFile(file, newContent); - return true; - } - - public static void saveToFile(final File file, final byte[] content) - throws IOException { - final FileOutputStream fos = new FileOutputStream(file); - fos.write(content); - fos.close(); - } + /** + * Deletes files and directories recursively. WARNING!!! Follows symlinks!!! + * + * @param file directory to delete with entire contents. + * @throws IOException if filesystem error happens + */ + public static void deleteRecursively(final File file) throws IOException { + if (file.isDirectory()) { + + File[] files = file.listFiles(); + if (files == null) + throw new RuntimeException("Failed to read directory content for: " + + file); + + for (final File subFile : files) + deleteRecursively(subFile); + + if (!file.delete()) + throw new RuntimeException("Failed to delete directory: " + + file); + + return; + } + + if (file.isFile()) + if (!file.delete()) + throw new FileNotFoundException("Failed to delete file: " + + file); + } + + public static byte[] getFileContents(final File file) + throws IOException { + + final byte[] result = new byte[(int) file.length()]; + try (final FileInputStream fileInputStream = new FileInputStream(file)) { + if (fileInputStream.read(result) != result.length) + throw new RuntimeException("Could not read file content:" + file); + } + return result; + } + + public static String getFileContentsAsString(final File file) + throws IOException { + try { + return new String(getFileContents(file), "UTF-8"); + } catch (final UnsupportedEncodingException exception) { + throw new RuntimeException(exception); + } + } + + /** + * Compares new file content with old file content. If content in equal, + * then leaves file as-is. If content differs, then overrides file with the + * new content. + * + * @param file file to potentially overwrite + * @param newContent new content + * @return true if file was overwritten. + * @throws FileNotFoundException if file is not found. + * @throws IOException if error happens during file IO. + */ + public static boolean overwriteFileIfContentDiffers(final File file, + final byte[] newContent) throws IOException { + + checkForEquality: + { + if (file.length() == newContent.length) { + + final byte[] oldContent = getFileContents(file); + + for (int i = 0; i < newContent.length; i++) + if (newContent[i] != oldContent[i]) + break checkForEquality; + + // new file content in identical to old content + return false; + } + } + + // New content differs from existing. Overwrite file. + saveToFile(file, newContent); + return true; + } + + public static void saveToFile(final File file, final byte[] content) + throws IOException { + try (final FileOutputStream fos = new FileOutputStream(file)) { + fos.write(content); + } + } }