package blade.migrate.core; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.nio.file.FileVisitResult; import java.nio.file.FileVisitor; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; public class FileHelper { public List<File> findFiles(final File dir, final String ext) { final List<File> files = new ArrayList<>(); final FileVisitor<Path> visitor = new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile( Path path, BasicFileAttributes attrs) throws IOException { File file = path.toFile(); if (file.isFile()) { if (file.getName().endsWith( ext )) { files.add(file); } } return super.visitFile(path, attrs); } }; try { Files.walkFileTree(dir.toPath(), visitor); } catch (IOException e) { // TODO properly log exception e.printStackTrace(); } return files; } public String readFile(File file) throws FileNotFoundException, IOException { String returnValue = null; try (FileInputStream stream = new FileInputStream(file)) { Reader r = new BufferedReader(new InputStreamReader(stream), 16384); StringBuilder result = new StringBuilder(16384); char[] buffer = new char[16384]; int len; while ((len = r.read(buffer, 0, buffer.length)) >= 0) { result.append(buffer, 0, len); } returnValue = result.toString(); r.close(); } return returnValue; } public int writeFile(File file, String contents) throws IOException { int retval = -1; try (FileOutputStream stream = new FileOutputStream(file); BufferedOutputStream out = new BufferedOutputStream( stream ); BufferedInputStream bin = new BufferedInputStream(new ByteArrayInputStream(contents.getBytes()))) { byte[] buffer = new byte[1024]; int bytesRead = 0; int bytesTotal = 0; // Keep reading from the file while there is any content // when the end of the stream has been reached, -1 is returned while ((bytesRead = bin.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); bytesTotal += bytesRead; } retval = bytesTotal; } return retval; } }