Criar DIRETORIO E SubDiretorio

Ola, tenho a seguinte estrutura de diretorio
C:\LOG
|
|_____CLIENTE (aqui eu quero criar outro diretorio com nome CLIENTE ou seja com nome do diretorio acima e e mais a data atual do computador)
|
|______PEDIDO (aqui eu quero criar outro diretorio com nome PEDIDO ou seja com nome do diretorio acima e e mais a data atual do computador)

TEM COMO FAZER ISSO…

sim moça…tem como fazer!

dá uma olhada nesse exemplo:

  // Create a directory; all ancestor directories must exist
    boolean success = (new File("directoryName")).mkdir();
    if (!success) {
        // Directory creation failed
    }
    
    // Create a directory; all non-existent ancestor directories are
    // automatically created
    success = (new File("directoryName")).mkdirs();
    if (!success) {
        // Directory creation failed
    }

http://www.exampledepot.com/egs/java.io/CreateDir.html

t+

`Nao consegui aplicar esse modelo…

Qual o erro???

nao da erro simplismente nao cria diretorio… pq tem q ser a estrutura q passei anteriormente…

    	SimpleDateFormat simpleDateFormat = new SimpleDateFormat("ddMMyyyyHHmmss");
    	    	
    	String path = "C:\\Log\\Vanessa" + simpleDateFormat.format(new Date());
    	
    	File file = new File(path);
    	
    	if(file.mkdirs()) {
    		System.out.println("Criado com sucesso!");
    	}
    	else {
    		System.out.println("Falhou!!!");
    	}

To criando um diretorio com o seu nome e a data/hora

entao esse codigo funciona mas eu nao quero criar o diretorio com nome fixo… Exemplo
C:\LOG dentro da pasta log eu vou ter outras pasta como CLIENTE, PEDIDOS e assim por diante… então eu preciso criar um diretorio dentro desses subDiretorio CLIENTE , PEDIDOS… e ate mesmo dentro da PASTA LOG… esse novo diretorio q eu tenho q criar ele tem q pegar o nome do diretorio q ele esta e criar com nome diretorio mais a data… Ex ja tem o diretorio CLIENTE —(ira criar o sub) CLIENTE_30-05-2007… ou
PEDIDO -> criar dentro dele PEDIDO_30-05-2007 e assim por diante, esse exemplo q vc me passou ele cria apenas com nome fixo…

		String path = "C:\\Log";
		
		File file = new File(path);
		List<File> files = new ArrayList<File>();
		Collections.addAll(files, file.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()) ;
				new File(newPath).mkdirs();
			}
		}

Primeira estou muito grata por vc ter me ajudado…
vc sabe se tem como mover arquivos dentro do diretorio… exemplo
C:\LOG
|__CLIENTES ( aquii tem arquivos .txt varios… e foi criado uma pasta CLIENTE_31-05-2007, EU quero mover os txt para essa pasta tem como…
e assim para as outras tbm

		File file = new File("C:\\Log\\Cliente");
		
		//Montando um List com todos os arquivos da pasta Cliente
		List<File> files = new ArrayList<File>();
		Collections.addAll(files, file.listFiles());
		
		for(File element : (List<File>) files) {
			if(element.isFile()) {
				element.renameTo(new File("C:\\Log\\Cliente\\Cliente_30-05-2007\\" + element.getName()));
			}
		}

Vanessa com esse codigo eu to pegando todos os arquivos da pasta Cliente e estou enviando para a pasta Cliente_30-05-2007.

Sim assim eu consegui fazer… mas eu nao posso passar o nome do diretorio fixo pq eu nao vou ter apenas um direttorio eu posso ter varios como c:\log dentro dele clientes, pedidos, produtos e assim por diante dai dentro de clientes eu crio outro diretorio clientes_31-05-2007 e todos arquivos .txt q estao dentro de clientes eu movo para dentro do clientes_31-05-2007 e assim por diantes com todos os outros diretorios

entao eu nao posso passar o caminho especifico para q eu quero mover pois eu vou ter mais diretorio ele tem q ser recursivo tipo
c:\log -> cliente (aqui tem varios arquivos txt e tenho q mover para pasta que foi criada clientes_31-05-2007)… o mesmo tenho q fazer com a pasta de pedidos, entre outras…

Certo… junta os dois que eu te passei, que vai ficar desse jeito…
Tenta algo ai e posta para a podermos te ajudar!

o codigo sera q vc pode me ajudar

public  static void criarDiretorio(String diretorio, String arq)
{
     File file = new File(diretorio); 
     List<File> files = new ArrayList<File>(); 
     Collections.addAll(files, file.listFiles());
     
 	File dir = new File("C:\\log");
	File arquivo = new File(".txt");
     
  
     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()) ;
           System.out.println("newPath "+ newPath);
           new File(newPath).mkdirs();
           recursivo(dir, arquivo); 
           System.out.println("dir" +dir);
           System.out.println("arquivo" +arquivo);
           recursivo(dir, arquivo);
        } 
      }
    }

private static void recursivo(File dir, File arquivo) 
{

    File[] files = dir.listFiles();
    String path = null;
    int index = -1;
    
    System.out.println("recursivo ");	 
    for (File file : files) // uma condicao
    {
        if (!file.isDirectory()) // se file nao for diretorio faca
        {
            path = file.getAbsolutePath(); // getAbsolutePath - devolve o nome completo do ficheiro..              
            index = path.lastIndexOf(".txt");
            System.out.println("index "+ index);
            System.out.println("path "+path);
           if(index > -1)
            {
        	   
                	 path = path.substring(0, index);
                 	 arquivo.renameTo(new File(path, arquivo.getName()));
                	 System.out.println("Arquivo foi movido com sucesso" +path);
            }
        } 
        else 
        {
            recursivo(file, arquivo);
        }
    }
}   




	    public static void main(String[] args){
	    	 String diretorio = "C:\\Log";
	    	 String arq = ".txt";
	    	 criarDiretorio(diretorio,arq);
	 	 } 
}

Vanessa, nao tem necessidade dessa recursividade…

arquivo.renameTo(new File(path, arquivo.getName())); 

Você usou o construtor de maneira errada…

O codigo abaixo vai percorrer todas as pastas dentro de um path, criar a pasta para o dia e morrer os arquivos .txt para dentro da pasta do dia.

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

public class Teste {
	 public static void main(String[] args) {		 
		 FileManager fm = new FileManager();
		 fm.criarDiretorio("C:\\Log");
	 }
}

class FileManager {
	
	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);
			}
		}
	}
	
	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()));
			}
		}
	}
}

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);
}

Olá,

E então, o erro está na hora de executar o programa? é esse?:

Data de hoje: 28/05/2007
Exception in thread “main” java.lang.NullPointerException
at Zip.recursivo(Zip.java:259)
at Zp.main(Zip.java:295)

É então por acaso esta mensagem?

Edson