001: /*
002: * Copyright 2001-2006 C:1 Financial Services GmbH
003: *
004: * This software is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License Version 2.1, as published by the Free Software Foundation.
007: *
008: * This software is distributed in the hope that it will be useful,
009: * but WITHOUT ANY WARRANTY; without even the implied warranty of
010: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
011: * Lesser General Public License for more details.
012: *
013: * You should have received a copy of the GNU Lesser General Public
014: * License along with this library; if not, write to the Free Software
015: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
016: */
017:
018: package de.finix.contelligent.util;
019:
020: import java.io.File;
021: import java.io.FileInputStream;
022: import java.io.FileOutputStream;
023: import java.io.IOException;
024: import java.io.InputStream;
025: import java.io.OutputStream;
026: import java.util.Stack;
027:
028: /**
029: * Provides utility methods for files.
030: */
031: final public class FileUtils {
032:
033: public static void copyRec(File sourceFile, File targetFile)
034: throws IOException {
035: Stack toCopy = new Stack();
036: toCopy.push(new FileCopyPair(sourceFile, targetFile));
037:
038: while (!toCopy.empty()) {
039: FileCopyPair filePair = (FileCopyPair) toCopy.pop();
040: File source = filePair.getSource();
041: File target = filePair.getTarget();
042: if (source.isDirectory()) {
043: // create the directory if no exists
044: if (target.exists()) {
045: if (target.isFile()) {
046: target.delete();
047: target.mkdirs();
048: }
049: } else {
050: target.mkdirs();
051: }
052: File[] sourceFiles = source.listFiles();
053:
054: // push all pairs to work on
055: for (int a = 0; a < sourceFiles.length; a++) {
056: toCopy
057: .push(new FileCopyPair(sourceFiles[a],
058: new File(target, sourceFiles[a]
059: .getName())));
060: }
061: } else if (source.isFile()) {
062: copy(source, target);
063: }
064: }
065: }
066:
067: /**
068: * Removed the contens of specified directory and if <tt>includeTop</tt>
069: * is true also the directory itself.
070: *
071: * @param dir
072: * a <code>File</code> value
073: * @param includeTop
074: * a <code>boolean</code> value
075: * @return true if and only if the top directory was successfully deleted;
076: * false otherwise
077: */
078: public static boolean removeDir(File dir, boolean includeTop) {
079: if (dir.isDirectory()) {
080: File files[] = dir.listFiles();
081: for (int i = 0; i < files.length; i++)
082: removeRec(files[i]);
083: }
084: if (includeTop)
085: return dir.delete();
086: else
087: return false;
088: }
089:
090: public static void removeRec(File toRemove) {
091: if (toRemove.isDirectory()) {
092: File fileList[] = toRemove.listFiles();
093: for (int a = 0; a < fileList.length; a++) {
094: removeRec(fileList[a]);
095: }
096: }
097: toRemove.delete();
098: }
099:
100: public static void copy(File input, File output) throws IOException {
101: FileInputStream in = null;
102: try {
103: in = new FileInputStream(input);
104: copy(in, output);
105: } finally {
106: if (in != null) {
107: try {
108: in.close();
109: } catch (IOException e) {
110: }
111: }
112: }
113: }
114:
115: public static void copy(InputStream in, File outputFile)
116: throws IOException {
117: FileOutputStream out = null;
118: try {
119: out = new FileOutputStream(outputFile);
120: copy(in, out);
121: } finally {
122: if (out != null) {
123: try {
124: out.close();
125: } catch (IOException e) {
126: }
127: }
128: }
129: }
130:
131: public static void copy(InputStream in, OutputStream out)
132: throws IOException {
133: int read = -1;
134: byte buf[] = new byte[4096];
135:
136: while ((read = in.read(buf, 0, 4096)) != -1) {
137: out.write(buf, 0, read);
138: }
139: }
140:
141: public static long length(InputStream in) throws IOException {
142: long length = 0L;
143:
144: int read = -1;
145: byte buf[] = new byte[4096];
146:
147: while ((read = in.read(buf, 0, 4096)) != -1) {
148: length = length + read;
149: }
150: return length;
151: }
152:
153: public static class FileCopyPair {
154: final private File source;
155:
156: final private File target;
157:
158: public FileCopyPair(File source, File target) {
159: this .source = source;
160: this .target = target;
161: }
162:
163: public File getSource() {
164: return source;
165: }
166:
167: public File getTarget() {
168: return target;
169: }
170: }
171:
172: }
|