package org.example.tests.utils; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; public class Utils { /** the platform specific EOL */ static private String eol = String.format("%n"); public static final String readStream(InputStream stream) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8")); try { StringBuilder result = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { if (result.length() > 0) { result.append(eol); } result.append(line); } return result.toString(); } finally { reader.close(); } } public static final void copyFully(InputStream input, OutputStream output) throws IOException { try { byte[] buf = new byte[1024]; int bytesRead; while (true) { if ((bytesRead = input.read(buf, 0, 1024)) < 0) break; output.write(buf, 0, bytesRead); } } finally { try { input.close(); } catch (IOException e) { /* ignore */ } try { output.close(); } catch (IOException e) { /* ignore */ } } } public static File createTempDir() throws IOException { File tempDir = File.createTempFile("bindex_testing", ".dir"); tempDir.delete(); if (!tempDir.mkdir()) throw new IOException("Failed to create temporary directory"); return tempDir; } /** * Deletes the specified file. Folders are recursively deleted.<br> * If file(s) cannot be deleted, no feedback is provided (fail silently). * * @param f file to be deleted */ public static void delete(File f) { try { deleteWithException(f); } catch (IOException e) { // Ignore a failed delete } } /** * Deletes the specified file. Folders are recursively deleted.<br> * Throws exception if any of the files could not be deleted. * * @param f file to be deleted * @throws IOException if the file (or contents of a folder) could not be * deleted */ public static void deleteWithException(File f) throws IOException { f = f.getAbsoluteFile(); if (!f.exists()) return; if (f.getParentFile() == null) throw new IllegalArgumentException("Cannot recursively delete root for safety reasons"); boolean wasDeleted = true; if (f.isDirectory()) { File[] subs = f.listFiles(); for (File sub : subs) { try { deleteWithException(sub); } catch (IOException e) { wasDeleted = false; } } } boolean fDeleted = f.delete(); if (!fDeleted || !wasDeleted) { throw new IOException("Failed to delete " + f.getAbsoluteFile()); } } public static File copyToTempFile(File tempDir, String resourcePath) throws IOException { File tempFile = new File(tempDir, resourcePath); tempFile.deleteOnExit(); tempFile.getParentFile().mkdirs(); Utils.copyFully(Utils.class.getResourceAsStream("/" + resourcePath), new FileOutputStream(tempFile)); return tempFile; } }