package org.teachingextensions.approvals.lite.util.io; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileFilter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import org.teachingextensions.approvals.lite.util.ArrayUtils; import org.teachingextensions.approvals.lite.util.Asserts; import org.teachingextensions.approvals.lite.util.ObjectUtils; /** * A static class of convenience functions for Files */ public class FileUtils { public static String readFromClassPath(Class<?> clazz, String string) { final InputStream resourceAsStream = loadInputStream(clazz, string); return FileUtils.readStream(resourceAsStream); } public static InputStream loadInputStream(Class<?> type, String name) { InputStream resource = type.getResourceAsStream(name); if (resource == null) { resource = type.getClassLoader().getResourceAsStream(name); } if (resource == null) { throw new IllegalStateException("Could not find resource: " + name); } return resource; } public static File[] getRecursiveFileList(File directory) { return getRecursiveFileList(directory, new SimpleFileFilter()); } public static File[] getRecursiveFileList(File directory, FileFilter filter) { ArrayList<File> list = new ArrayList<>(); if (!directory.isDirectory()) { throw new Error("File is not a directory: " + directory.getName()); } File directories[] = directory.listFiles(new SimpleDirectoryFilter()); for (File directory1 : directories) { ArrayUtils.addArray(list, getRecursiveFileList(directory1, filter)); } File files[] = directory.listFiles(filter); ArrayUtils.addArray(list, files); return list.toArray(new File[list.size()]); } public static void writeFile(File file, String text) throws IOException { Asserts.assertNotNull("Writing to file: " + file, text); File canonicalFile = file.getCanonicalFile(); canonicalFile.getParentFile().mkdirs(); BufferedWriter out = new BufferedWriter(new FileWriter(file)); out.write(text); out.close(); } public static void writeFileQuietly(File file, String text) { try { writeFile(file, text); } catch (IOException e) { ObjectUtils.throwAsError(e); } } public static String readFile(String absolutePath) throws IOException { return readFile(new File(absolutePath)); } public static String readFile(File file) throws IOException { BufferedReader in = new BufferedReader(new FileReader(file)); return readBuffer(in); } public static String readBuffer(BufferedReader in) throws IOException { StringBuilder string = new StringBuilder(); while (in.ready()) { string.append(in.readLine()); string.append("\n"); } in.close(); return string.toString(); } public static String readFileWithSuppressedExceptions(File databaseFile) { try { return FileUtils.readFile(databaseFile); } catch (FileNotFoundException e) { throw new RuntimeException("Invalid file '" + databaseFile.getAbsolutePath() + "'", e); } catch (IOException e) { throw new RuntimeException(e); } } public static String getExtensionWithDot(String filename) { int p = filename.lastIndexOf('.'); return filename.substring(p); } public static void createIfNeeded(String file) throws IOException { File f = new File(file); if (!f.exists()) { writeFile(f, ""); } } public static String readStream(InputStream resourceAsStream) { BufferedReader reader = new BufferedReader(new InputStreamReader(resourceAsStream)); String resource = null; try { resource = FileUtils.readBuffer(reader); } catch (IOException e) { ObjectUtils.throwAsError(e); } return resource; } public static boolean isNonEmptyFile(String approved) { File file = new File(approved); return file.exists() && file.length() > 0; } }