// BlogBridge -- RSS feed reader, manager, and web based service // Copyright (C) 2002-2006 by R. Pito Salas // // This program is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free Software Foundation; // either version 2 of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; // without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along with this program; // if not, write to the Free Software Foundation, Inc., 59 Temple Place, // Suite 330, Boston, MA 02111-1307 USA // // Contact: R. Pito Salas // mailto:pitosalas@users.sourceforge.net // More information: about BlogBridge // http://www.blogbridge.com // http://sourceforge.net/projects/blogbridge // // $Id: FileUtils.java,v 1.10 2007/03/21 18:57:20 spyromus Exp $ // package com.salas.bb.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; /** * Follection of utils for file system calls. */ public final class FileUtils { /** * Hidden constructor of utility class. */ private FileUtils() { } /** * Reads complete file into a string. * * @param path file path. * * @return contents. * * @throws IOException in case of I/O error. */ public static String readFileAsString(String path) throws IOException { byte[] buffer = new byte[(int) new File(path).length()]; FileInputStream f = new FileInputStream(path); f.read(buffer); return new String(buffer); } /** * Copies file from it's location to destination dir. * * @param file file to copy. * @param destDir dir. * * @throws java.io.IOException if I/O error happens. */ public static void copyFileToDir(File file, File destDir) throws IOException { String name = file.getName(); String filename = destDir.getAbsolutePath() + File.separator + name; File destFile = new File(filename); destFile.createNewFile(); copyFileToFile(file, destFile); } /** * Copies one file to another. * * @param source source file. * @param dest destination file. * * @throws java.io.IOException if I/O error happens. */ public static void copyFileToFile(File source, File dest) throws IOException { FileChannel sourceChannel = null; FileChannel targetChannel = null; try { sourceChannel = new FileInputStream(source).getChannel(); targetChannel = new FileOutputStream(dest).getChannel(); sourceChannel.transferTo(0, sourceChannel.size(), targetChannel); targetChannel.force(true); } finally { if (sourceChannel != null) sourceChannel.close(); if (targetChannel != null) targetChannel.close(); } } /** * Creates hierarchy of folders. * * @param aFolder folder to create. * * @return <code>TRUE</code> if was successfully created. */ public static boolean createFoldersHierarchy(File aFolder) { boolean created = true; if (aFolder != null && !aFolder.exists()) { File parent = aFolder.getParentFile(); created = createFoldersHierarchy(parent) && aFolder.mkdir(); } return created; } /** * Removes dir and all sub-dirs. * * @param dir dir to start removing from. */ public static void rmdir(File dir) { File[] nodes = dir.listFiles(); if (nodes != null) { for (File node : nodes) { if (node.isFile()) node.delete(); else rmdir(node); } dir.delete(); } } /** * Copies a directory or a file from source to destination. * * @param src source. * @param dst destination. * * @throws java.io.IOException in case of I/O error. */ public static void copyRec(File src, File dst) throws IOException { if (src == null || dst == null) return; if (dst.isFile()) return; if (src.isFile()) { // Copy file copyFileToDir(src, dst); } else { // Construct destination directory file String name = src.getName(); File newDst = new File(dst, name); if (!newDst.exists()) { // Create the destination directory if it doesn't exist yet newDst.mkdir(); } else if (newDst.isFile()) { throw new IOException("There's a file " + newDst.getName() + " in place of directory"); } // Copy files and directories from the source to a new destination recursively for (File file : src.listFiles()) copyRec(file, newDst); } } }