TCFileUtils.java :  » Net » Terracotta » com » tc » util » io » Java Open Source

Java Open Source » Net » Terracotta 
Terracotta » com » tc » util » io » TCFileUtils.java
/**
 * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright
 * notice. All rights reserved.
 */
package com.tc.util.io;

import org.apache.commons.io.IOUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class TCFileUtils {

  /**
   * Given a resource path, returns the File object of that resource
   */
  public static File getResourceFile(String resource) { 
    return org.apache.commons.io.FileUtils.toFile(TCFileUtils.class.getResource(resource));
  }
  
  /**
   * deletes all files with matching extension. Does not recurse into sub directories.
   */
  public static void forceDelete(File directory, String extension) throws IOException {
    Iterator files = org.apache.commons.io.FileUtils.listFiles(directory, new String[] { extension }, false).iterator();
    while (files.hasNext()) {
      File f = (File) files.next();
      org.apache.commons.io.FileUtils.forceDelete(f);
    }
  }

  /**
   * copy one file to another. Can also copy directories
   */
  public static void copyFile(File src, File dest) throws IOException {
    List queue = new LinkedList();
    queue.add(new CopyTask(src.getCanonicalFile(), dest.getCanonicalFile()));

    while (queue.size() > 0) {
      CopyTask item = (CopyTask) queue.remove(0);
      if (item.getSrc().isDirectory()) {
        File destDir = item.getDest();
        destDir.mkdirs();

        if (!destDir.isDirectory()) { throw new IOException("Destination directory does not exist: " + destDir); }

        String[] list = item.getSrc().list();
        for (int i = 0; i < list.length; i++) {
          File _src = new File(item.getSrc(), list[i]);
          File _dest = new File(item.getDest(), list[i]);
          queue.add(new CopyTask(_src, _dest));
        }
      } else if (item.getSrc().isFile()) {
        try {
          doCopy(item.getSrc(), item.getDest());
        } catch (IOException e) {
          System.err.println("Error copying: [" + item.getSrc() + "] to [" + item.getDest() + "]");
        }
      } else {
        throw new IOException(item.getSrc() + " is neither a file or a directory");
      }
    }

  }

  private static void doCopy(File src, File dest) throws IOException {
    FileInputStream in = null;
    FileOutputStream out = null;
    byte[] buffer = new byte[1024 * 8];
    int count;
    try {
      in = new FileInputStream(src);
      out = new FileOutputStream(dest);
      while ((count = in.read(buffer)) >= 0) {
        out.write(buffer, 0, count);
      }
    } finally {
      IOUtils.closeQuietly(in);
      IOUtils.closeQuietly(out);
    }
  }

  private static class CopyTask {
    private final File src;
    private final File dest;

    public CopyTask(File src, File dest) {
      this.src = src;
      this.dest = dest;
    }

    public File getSrc() {
      return src;
    }

    public File getDest() {
      return dest;
    }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.