001: /*
002: * Created on 07/03/2002
003: *
004: * Swing Components - visit http://sf.net/projects/gfd
005: *
006: * Copyright (C) 2004 Igor Regis da Silva Simões
007: *
008: * This program is free software; you can redistribute it and/or
009: * modify it under the terms of the GNU General Public License
010: * as published by the Free Software Foundation; either version 2
011: * of the License, or (at your option) any later version.
012: *
013: * This program is distributed in the hope that it will be useful,
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
016: * GNU General Public License for more details.
017: *
018: * You should have received a copy of the GNU General Public License
019: * along with this program; if not, write to the Free Software
020: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
021: *
022: */package br.com.gfpshare.util;
023:
024: import java.io.File;
025: import java.io.FileInputStream;
026: import java.io.FileOutputStream;
027: import java.io.IOException;
028: import java.util.Date;
029: import java.util.Vector;
030:
031: /**
032: * Class File Manager é uma classe responssável por executar operações de manipulação de arquivos no sistema de arquivos
033: *
034: * @created 04 de Janeiro de 2004
035: * @author Igor Regis da Silva Simões
036: */
037: public final class FileManager {
038:
039: /**
040: * Cria uma nova instancia de FileManager
041: */
042: public FileManager() {
043: //Não fazemos nada
044: }
045:
046: /**
047: * Cria um novo diretório
048: * @param dir : O caminho completo do diretório a ser criado
049: */
050: public static final void mkdir(String dir) {
051: File arq = new File(dir);
052: arq.mkdir();
053: }
054:
055: /**
056: * Deleta um arquivo ou diretório
057: * @param dir : O caminho completo do diretório/arquivo a ser deletado
058: */
059: public static final void delete(String dir) {
060: File arq = new File(dir);
061: arq.delete();
062: }
063:
064: /** Lista o conteúdo de um diretório
065: * @return Retorna um array contendo os nomes dos arquivos/diretórios contidos no diretório
066: * @param dir : O caminho completo do diretório o quel se deseja listar o conteúdo.
067: */
068: public static final String[] list(String dir) {
069: File arq = new File(dir);
070: return arq.list();
071: }
072:
073: /** Indica o menor arquivo de um conjunto
074: * @return Retorna um File que referencia o menor arquivo da comparação.
075: * @param dir : O caminho completo do diretório o qual o conteúdo deve ser pesquisado
076: * @param extension : A extensão de arquivo a servir de filtro para a pesquisa.
077: */
078: public static final File getMenorFile(String dir, String extension) {
079: File arq = new File(dir);
080: File[] arquivos = arq.listFiles();
081: File menor = null;
082:
083: int len = 0;
084: for (int i = 0; i < arquivos.length; i++)
085: if ((getExtension(arquivos[i])).equals(extension))
086: len++;
087:
088: File[] temp = new File[len];
089:
090: int j = 0;
091: for (int i = 0; i < arquivos.length; i++)
092: if ((getExtension(arquivos[i])).equals(extension)) {
093: temp[j] = arquivos[i];
094: j++;
095: }
096:
097: if (temp.length == 1)
098: return temp[0];
099: else if (temp.length == 0)
100: return null;
101:
102: menor = temp[0];
103: for (int i = 0; i < temp.length - 1; i++)
104: if (menor.length() > temp[i + 1].length())
105: menor = temp[i + 1];
106:
107: return menor;
108: }
109:
110: /** Retorna o arquivo mais novo de um diretório
111: * @return Retorna um File referenciando o arquivo mais novo
112: * @param dir : O caminho completo do diretório o qual o conteúdo deve ser pesquisado
113: * @param extention : A extensão de arquivo a servir de filtro para a pesquisa.
114: */
115: public static final File getNewerFile(String dir, String extention) {
116: File arq = new File(dir);
117: File[] arquivos = arq.listFiles();
118: File maior = null;
119:
120: int len = 0;
121:
122: for (int i = 0; i < arquivos.length; i++)
123: if ((getExtension(arquivos[i])).equals(extention))
124: len++;
125:
126: if (len == 0)
127: return null;
128: File[] temp = new File[len];
129:
130: int j = 0;
131: for (int i = 0; i < arquivos.length; i++)
132: if ((getExtension(arquivos[i])).equals(extention)) {
133: temp[j] = arquivos[i];
134: j++;
135: }
136:
137: if (temp.length == 1)
138: return temp[0];
139:
140: maior = temp[0];
141: for (int i = 0; i < temp.length - 1; i++)
142: if (maior.lastModified() < temp[i + 1].lastModified())
143: maior = temp[i + 1];
144:
145: return maior;
146: }
147:
148: /** Retorna o arquivo mais velho de um diretório
149: * @return Reotrna um array de File contendo referências para os arquivos filtrados
150: * @param date Data até qual os arqivos devem estar modificados para serem considerados
151: * @param dir : O caminho completo do diretório o qual o conteúdo deve ser pesquisado
152: * @param extention : A extensão de arquivo a servir de filtro para a pesquisa.
153: */
154: public static final File[] getOldestFiles(String dir,
155: String extention, Date date) {
156: File arq = new File(dir);
157: File[] arquivos = arq.listFiles();
158:
159: int len = 0;
160:
161: for (int i = 0; i < arquivos.length; i++)
162: if ((getExtension(arquivos[i])).equals(extention))
163: len++;
164:
165: if (len == 0)
166: return null;
167: File[] temp = new File[len];
168:
169: int j = 0;
170: for (int i = 0; i < arquivos.length; i++)
171: if ((getExtension(arquivos[i])).equals(extention)) {
172: temp[j] = arquivos[i];
173: j++;
174: }
175:
176: int arqs = 0;
177: for (int i = 0; i < temp.length; i++)
178: if (temp[i].lastModified() < date.getTime())
179: arqs++;
180:
181: File[] resultado = new File[arqs];
182: int indice = 0;
183: for (int i = 0; i < temp.length; i++)
184: if (temp[i].lastModified() < date.getTime())
185: resultado[indice++] = temp[i];
186:
187: return resultado;
188: }
189:
190: /** Retorna a extensão de um arquivo
191: * @return Retorna uma String com a extenção do arquivo
192: * @param f File referenciando o arquivo do qual se quer extrtair a extenção
193: */
194: public static final String getExtension(File f) {
195: int i = f.getName().lastIndexOf('.');
196:
197: if (i > 0 && i < f.getName().length() - 1)
198: return f.getName().substring(i + 1).toLowerCase();
199: return " ";
200: }
201:
202: /** Retorna a extensão de um arquivo
203: * @return Retorna uma String com a extenção do arquivo
204: * @param f File referenciando o arquivo do qual se quer extrtair a extenção
205: */
206: public static final String getExtension(String f) {
207: int i = f.lastIndexOf('.');
208:
209: if (i > 0 && i < f.length() - 1)
210: return f.substring(i + 1).toLowerCase();
211: return " ";
212: }
213:
214: /** Move um arquivo.
215: * <BR>Nota: Pode ser usado para renomear um arquivo.
216: * @param from : O caminho completo do arquivo a ser movido
217: * @param to : O caminho completo do destino do arquivo, incluindo o nome do arquivo.
218: */
219: public static final void move(String from, String to) {
220: File arq = new File(from);
221: File destino = new File(to);
222: arq.renameTo(destino);
223: }
224:
225: /** Copia um arquivo para um determinado diretório. <BR>Note: O nome do outrro arquivo pode ser mudado.
226: * @param from : O caminho completo do arquivo a ser copiado
227: * @param to : O caminh completo do destino da cópia do arquivo, incluindo o nome do arquivo.
228: * @throws IOException Lança uma exceção se houver falha na operação
229: */
230: public static final void copy(String from, String to)
231: throws IOException {
232: File tamanho = new File(from);
233: byte[] transf = new byte[(int) tamanho.length()];
234:
235: FileInputStream arq = new FileInputStream(from);
236: FileOutputStream destino = new FileOutputStream(to);
237:
238: arq.read(transf);
239: destino.write(transf);
240: }
241:
242: /**
243: * Deleta uma árvore de diretórios.
244: * @param tree : O caminho completo do diretório a ser deletado.
245: * @throws IOException Lança uma exceção se houver falha na operação
246: */
247: public static final void deleteTree(String tree) throws IOException {
248: File arq = new File(tree);
249: String[] content = arq.list();
250:
251: for (int i = 0; i < content.length; i++) {
252: File innerArq = new File(tree + File.separator + content[i]);
253:
254: if (innerArq.isDirectory()
255: && (innerArq.getAbsolutePath()).equals(innerArq
256: .getCanonicalPath())) {
257: deleteTree(innerArq.getPath());
258: delete(innerArq.getPath());
259: } else {
260: delete(innerArq.getPath());
261: }
262: }
263: delete(tree);
264: }
265:
266: /** Deleta o conteúdo de um diretório (exeto outros diretórios)
267: * @param path O caminho completo do diretóro cuje o conteúdo deve ser deletado.
268: */
269: public static final void deleteContentFiles(String path) {
270: File arq = new File(path);
271: String[] content = arq.list();
272:
273: for (int i = 0; i < content.length; i++) {
274: File innerArq = new File(path + File.separator + content[i]);
275: if (innerArq.isFile())
276: innerArq.delete();
277: }
278: }
279:
280: /**
281: * Executa a mesma função de um comando de ls - R ou dir /s com uma extensão
282: * de arquivo a ser procurado.
283: * @param dir Diretorio por onde se deseja realizar a busca.
284: * @param extensao Exntesão do arquivo que se deseja encontrar
285: * @return Object[] com a lista de caminho completo para os arquivos que atendem o critério da pesquisa
286: */
287: public static final Object[] lsMenosR(String dir, String extensao) {
288: File arq = new File(dir);
289: String[] content = arq.list();
290: Vector resultado = new Vector();
291:
292: for (int i = 0; i < content.length; i++) {
293: File innerArq = new File(dir + File.separator + content[i]);
294: if (innerArq.isFile()) {
295: if (content[i].endsWith(extensao))
296: resultado.add(dir + File.separator + content[i]);
297: } else {
298: Object[] resultadoRecursivo = lsMenosR(innerArq
299: .getAbsolutePath(), extensao);
300: for (int j = 0; j < resultadoRecursivo.length; j++) {
301: resultado.add(resultadoRecursivo[j]);
302: }
303: }
304: }
305: return resultado.toArray();
306: }
307: }
|