Estrutura de diretórios

Tem como saber em Java a estrutura de diretórios do sistema?
Por exemplo, a partir do meu C: , ter como listar todos os diretórios e
arquivos presentes?

Alguma coisa relacionada a System?
Valew!!!

http://java.sun.com/j2se/1.4.2/docs/api/java/io/File.html :wink:

[]'s

Mas eu gostaria de listar também subdiretórios e arquivos dentro de subdiretórios.

Essa é minha dúvida.
valew…

Dá pra vc fazer isso usando recursividade. Tipo, vc usa um dos vários métodos que retornam File[], itera sobre esse array, e pra cada referência de File que vc tem na mão, faz a mesma coisa recursivamente. Entendeu? :wink:

[]'s

coisa do tipo:

File file = new File("C:\projetos");

File [] list = file.listFiles();
for(int i=0; i<list.length; i++) {
    System.out.println(list[i].getName());
    
    File [] list2 = list[i].listFiles();
   
    for(int j=0; j<list.length; j++) {
        System.out.println("    " + list2[j].getName());
    }
}

Nesse código ele somente vai até o 2º nível de diretório.
Queria todos. :lol:

Para listar somente os subdiretorios, utilize um FileFilter:

public Teste(){ List diretorios = Arrays.asList(new File("c:\projeto").listFiles( new FileFilter(){ public boolean accept(File pathname){ return pathname.isDirectory(); } } )); for(Iterator i=diretorios.iterator();i.hasNext();){ System.out.println(i.next()); } }

É exatamente o q fiz, mas vc utilizou List ao invés de Array.

E… ?

Rafael

Esse programa abaixo faz o seguinte : Vc entra com o nome de diretorio e ele lista os arquivos nesse diretorio. Mas se nesse diretorio que vc deu como entrada contiver subdiretorios ele tb listara os arquivos desse subdiretorio e assim sucessivamente, de maneira recursiva. Para fazer o que vc quer bastar mandar listar alem dos arquivos , istar tb os subdiretorios.

/*

  • Pesquisa.java
  • Created on November 21, 2003, 2:24 PM
    */

/**
*

  • @author lindeberg
    /
    import java.io.
    ;
    import javax.swing.*;
    import java.util.ArrayList;
    public class Pesquisa extends javax.swing.JFrame {

    static int i,t=0;
    static String output = “”, maior="";
    static File aux [];
    static long max;

    public Pesquisa() {
    initComponents();
    setSize(500,600);
    }
    public static void Directory(File conteudo)
    {
    output += ("<DIR> "+ conteudo + "
    ");
    File subvet [];
    File file [];
    ArrayList fileArray = new ArrayList();
    subvet = conteudo.listFiles();
    for(int w = 0;w < subvet.length; w++)
    {
    if (subvet[w].isFile())
    {

     		output += (subvet[w].getName() + "
    

");

    		fileArray.add(subvet[w]);
                    //file[t] = subvet[w];
    	}	
    }
    
    file = (File[])fileArray.toArray();
    t = file.length;
    
    for(int v = 0;v &lt; t;v++)
    {
    	max = file[v].length();
    	if (v +1  &lt;= file.length &amp;&amp; file[v +1].length() &gt;= max)	
   		{
   			max = subvet[v+1].length();
   			maior = subvet[v+1].getName();
    	}
    }
    		
    
    		
    	
    	
    
    output += ("O maior é : " + maior+ "Tamanho : "+ max + "

");
for( int j=0 ; j < subvet.length ; j++ ){
if (subvet[j].isDirectory()){

            Directory(subvet[j]);
        }
  //      if (subvet[j].isFile()){//aqui eh a logica da comparação dos arquivos
            
  //          output += (subvet[j].getName() + "

");
// }
} //fim do for

}

/** This method is called from within the constructor to
 * initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is
 * always regenerated by the Form Editor.
 */
private void initComponents() {
    jLabel1 = new javax.swing.JLabel();
    raiz = new javax.swing.JTextField();
    jLabel2 = new javax.swing.JLabel();
    local = new javax.swing.JTextField();
    jScrollPane1 = new javax.swing.JScrollPane();
    saida = new javax.swing.JTextArea();
    jButton1 = new javax.swing.JButton();
    jLabel3 = new javax.swing.JLabel();
    jLabel4 = new javax.swing.JLabel();

    getContentPane().setLayout(null);

    addWindowListener(new java.awt.event.WindowAdapter() {
        public void windowClosing(java.awt.event.WindowEvent evt) {
            exitForm(evt);
        }
    });

    jLabel1.setText("Diretu00f3rio rau00edz ");
    getContentPane().add(jLabel1);
    jLabel1.setBounds(30, 80, 140, 15);

    getContentPane().add(raiz);
    raiz.setBounds(190, 80, 180, 19);

    jLabel2.setText(" Localizau00e7u00e3o do diretorio");
    getContentPane().add(jLabel2);
    jLabel2.setBounds(10, 130, 160, 15);

    getContentPane().add(local);
    local.setBounds(190, 130, 180, 19);

    saida.setEditable(false);
    jScrollPane1.setViewportView(saida);

    getContentPane().add(jScrollPane1);
    jScrollPane1.setBounds(80, 270, 380, 200);

    jButton1.setText("Mostra");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    getContentPane().add(jButton1);
    jButton1.setBounds(290, 170, 77, 25);

    jLabel3.setText("u00c1rvore de Diretorios");
    getContentPane().add(jLabel3);
    jLabel3.setBounds(60, 230, 140, 15);

    jLabel4.setFont(new java.awt.Font("Dialog", 3, 18));
    jLabel4.setText("trabalho");
    getContentPane().add(jLabel4);
    jLabel4.setBounds(300, 20, 160, 15);

    pack();
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
            String caminho;
            int w;
            caminho = local.getText();                             
	File nomeFile = new File(caminho);
	if (!nomeFile.exists() || !nomeFile.isDirectory()){
		JOptionPane.showMessageDialog(this,"Digite apenas Diretoios");
	}
    else
    {
         Directory(nomeFile);
    }
    saida.setText(output);
}

/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
    System.exit(0);
}

/**
 * @param args the command line arguments
 */

public static void main(String args[]) {
    
    new Pesquisa().show();
}


// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextField local;
private javax.swing.JTextField raiz;
private javax.swing.JTextArea saida;
// End of variables declaration

}

Valew pessoal,
consegui fazer…
não conhecia muito esse esquema de recursividade, legal.
Pra quem quiser, ae vai um exemplo, bem simples.

Coloque na variável path, o diretório a partir do qual você quer começar a busca.

package rascunho;

import java.io.File;

public class ListaArquivosDiretorios {

	public ListaArquivosDiretorios() {
	}

	public void listar(File path) {
		File [] files = path.listFiles();
		
		for(int i=0; i<files.length; i++) {
			if (files[i].isFile())
				System.out.println("  " + files[i].getName());
			else
				System.out.println(files[i].getName());
				
			if (files[i].isDirectory()){
				listar(files[i]);
			}
		}
	}
	
	public static void main(String args[]) {
		String path = "O diretorio a partir de onde quer listar";
		ListaArquivosDiretorios instance = new ListaArquivosDiretorios();
		instance.listar(new File(path));
	}

}

Valew!!!

Nao foi exatamente nao … Eu coloquei um FileFilter, para q soh venham diretorios… Daih, vc nao tem q tratar dentro do Loop

Beleza…
Valew cara, obrigado!