Ola… Deu certo o que vc me passou… Estou usando o metodo que vc indicou, agora estou tentando compactar as pastas que foram criada com os arquivos dentro mas esta dando erro tem como vc verificar onde estou errando…
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.zip.Adler32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Zip {
public String dirAtual ="";
/**
* Lê um arquivo passado no parâmetro para a memória.
* @param file Arquivo a ser lido.
* @return Arquivo lido em bytes.
* @throws Exception
*/
private byte[] read(File file) throws Exception
{
byte[] result = null;
if (file != null && !file.isDirectory())
{
final long length = file.length();
result = new byte[(int) length];
InputStream fi = new FileInputStream(file);// FileInputStream - controla o fluxo de byte entrando
byte b;
long count = 0;
while ((b = (byte) fi.read()) != -1)
{
result[(int) count++] = b;
}
fi.close();
}
return result;
}
/**
* Adiciona um diretório ou arquivo a um ZipOutputStream instanciado.
* @param zipName - Nome no arquivo zip que será gerado, exeplo: C:\\log.zip
* @param file - Nome do diretório a ser comprimido.
* @throws Exception
*/
private void addToZip(ZipOutputStream out, File file, String path) throws Exception
{
byte data[] = null;
ZipEntry entry = null;
if (file != null){
String name = file.getAbsolutePath().replace('\\', '/');
System.out.println(">>>> Adding: " + name);
if (file != null){
if (file.isDirectory()){
File[] files = file.listFiles();
for (File f : files){
addToZip(out, f, path);
}
}
else {
entry = new ZipEntry(name);
out.putNextEntry(entry);
data = read(file);
if (data != null && data.length > 0){
out.write(data, 0, data.length);
}
out.closeEntry();
out.flush();
}
}
}
}
/**
* Adiciona um diretório ou arquivo a um ZipOutputStream instanciado.
* @param file - Arquivo a ser comprimido.
* @param zip - Zip que será gerado, exeplo: C:\\myzip.zip
* @throws Exception
*/
public void zip(File file, File zip)
{
byte data[] = null;
ZipEntry entry = null;
ZipOutputStream out = null;
FileOutputStream dest = null;
CheckedOutputStream checksum = null;
if (file != null)
{
try
{
dest = new FileOutputStream(zip);
checksum = new CheckedOutputStream(dest, new Adler32());
try
{
out = new ZipOutputStream(new BufferedOutputStream(checksum));
String name = file.getAbsolutePath().replace('\\', '/');
System.out.println(">>>> Zipping: " + name);
entry = new ZipEntry(name);
out.putNextEntry(entry);
data = read(file);
System.out.println(" File " + file);
if (data != null && data.length > 0)
{
out.write(data, 0, data.length);
}
}
finally
{
out.closeEntry();
out.flush();
out.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
/**
* Comprime um diretório ou arquivo.
* @param zipName - Nome no arquivo zip que será gerado, exemplo: C:\\myzip.zip
* @param dirName - Nome do arquivo ou diretório a ser comprimido.
*/
public void zip(String zipName, String dirName)
{
/* Instancia um ZipOutputStream e o passa por parametro, isso para poder
* finalizar com um out.close(). */
ZipOutputStream out = null;
FileOutputStream dest = null;
CheckedOutputStream checksum = null;
try
{
dest = new FileOutputStream(new File(zipName));
checksum = new CheckedOutputStream(dest, new Adler32());
out = new ZipOutputStream(new BufferedOutputStream(checksum));
File dir = new File(dirName);
if(dir.isDirectory())
{
addToZip(out, dir, dir.getAbsolutePath());
System.out.println("Dir " + dir);
}
else
{
String parent = dir.getParent();
int length = parent.length();
String substring = parent.substring(0, length);
addToZip(out, dir, substring);
}
System.out.println(">>>> checksum: " + checksum.getChecksum().getValue());
}
catch (Exception e)
{
e.printStackTrace();
}
catch (Error err)
{
err.printStackTrace();
}
finally
{
try
{
out.flush();
out.finish();
out.close();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (Error err)
{
err.printStackTrace();
}
}
}
public void moveFile(String path, String newPath)
{
List<File> files = new ArrayList<File>();
Collections.addAll(files, new File(path).listFiles());
for(File element : (List<File>) files)
{
if(element.getName().indexOf(".txt") > 0)
{
element.renameTo(new File(newPath + "\\" + element.getName()));
path = element.getAbsolutePath();
this.dirAtual= newPath;
}
}
}
public void criarDiretorio(String path)
{
List<File> files = new ArrayList<File>();
Collections.addAll(files, new File(path).listFiles());
for(File element : (List<File>) files)
{
if(element.isDirectory())
{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy");
String newPath = element.getAbsolutePath() + "\\" + element.getName() + "_" + simpleDateFormat.format(new Date()) ;
if(new File(newPath).mkdirs())
System.out.println("Diretorio criado com sucesso");
moveFile(path + "\\" + element.getName(), newPath);
}
}
}
private void recursivo(File dir)
{
Date ultimaModificacao;
DateFormat dateFormatter;
File[] files = dir.listFiles();
String path = null;
String newPath = “C:\Log”;
int index = -1;
Date hoje = new Date(java.lang.System.currentTimeMillis()); //java.util.Date hoje = new java.util.Date(java.lang.System.currentTimeMillis());
Calendar calendar = new GregorianCalendar();//Cria uma instancia da classe Calendar(), GregorianCalendar() essa classe permite fazer operacoes com a data ex - somar ou diminuir
calendar.setTime(hoje); //volta a ter um objeto como Date
calendar.add(Calendar.DAY_OF_MONTH, -8);
Date trintaAMenos = new Date(calendar.getTimeInMillis());
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");//java.text.DateFormat df = new java.text.SimpleDateFormat("dd/MM/yyyy");
System.out.println("data de hoje " + df.format(trintaAMenos));
GregorianCalendar dataAtual = new GregorianCalendar();
Date data = dataAtual.getTime();
DateFormat formata = DateFormat.getDateInstance();
formata = new SimpleDateFormat("dd-MM-yyyy");
String resultado = formata.format(data);
for (File file : files) // uma condicao
{ System.out.println("for file" +file);
if (!file.isDirectory()) // se file nao for diretorio faca
{
path = file.getAbsolutePath(); // getAbsolutePath - devolve o nome completo do ficheiro..
System.out.println("path = recursivo "+path);
dateFormatter = DateFormat.getDateInstance(DateFormat.DEFAULT);
index = path.lastIndexOf(".txt");
if(index > -1)
{
dateFormatter = DateFormat.getDateInstance(DateFormat.DEFAULT);
ultimaModificacao = new Date(file.lastModified());
System.out.println(dateFormatter.format(ultimaModificacao));
if (trintaAMenos.compareTo(ultimaModificacao)== -1) //= 1 a ultimaModeficacao e maior do que trintaAMenos
{
criarDiretorio(newPath);
path = path.substring(0, index);
String teste = dirAtual + ".zip";
System.out.println("teste" +teste);
new Zip().zip(file, new File(teste) );
}
else
System.out.println("trintaAMenos e maior do que ultimaModificacao");
}
}
else
{
recursivo(file);
}
}
}
public static void main(String[] args)
{
File dir = new File("C:\\log");
Zip novo = new Zip();
novo.recursivo(dir);
}