Duvida classe File!

9 respostas
S

Bom galera, sou novo no forum e estou com um problema com File.
Preciso entregar esse trabalho para o professor da facul essa semana, então se for possível me dar uma ajuda, ficarei grato.

Bom, é o seguinte, eu preciso fazer:

  1. Fazer um programa que recebe o caminho de um diretório e mostre todos os arquivos e diretórios contidos nesta pasta e nas suas subpastas. Cada nova subpasta deve ter o seu nome deslocado de 3 caracteres de espaço (“ ”) para a direita, depois de cada subdiretório deve existir a barra (“”) e antes de cada nome de arquivo deve existir a barra (“”).

eu consegui fazer para apenas 2 pastas, mas nao estou tendo ideias para fazer isso para o número de pastas/subpastas tiverem, entenderam?
o que eu tenho até agora é isto:

import javax.swing.*;
import java.io.*;

public class Entregar{
	public static void main(String[] args){
		String temp;
		File dir = new File(JOptionPane.showInputDialog("Entre com o diretório"));
		String[] arquivos = dir.list();
		File[] dir2 = new File[arquivos.length];
		System.out.println(dir.getName()+"\");
		for (int i=0; i<arquivos.length; i++){
			dir2[i] = new File(dir, arquivos[i]);
			if( dir2[i].isDirectory() == true ){
				System.out.println("   "+dir2[i].getName()+"\");
				temp = dir2[i].getPath();
				File dir3 = new File(temp);
				String[] arq = dir3.list();
				for(int j=0; j<arq.length; j++){
					System.out.println("      \"+arq[j]);
				}
			}
		}
		for( int i=0; i<arquivos.length; i++){
			if ( dir2[i].isFile() == true ){
				System.out.println(dir2[i].getName());
			}
		}
	}
}

Sei que é o meu primeiro post, mas eu sempre leio as matérias de vcs e agora estou precisando de uma ajuda mais direta.
Se alguém conseguir me ajudar ficarei grato, até mais, obrigado.

9 Respostas

T

Você só pode resolver isso recursivamente (mesmo que você não use a recursividade do Java, tem de pensar recursivamente).

S

é, uma ótima ideia.
porém realmente nao sei como fazer, primeiramente creio que teria que existir uma variavel global para saber quantos espaços e quantas barras deveriam ser adicionados antes dos nomes arquivos/pastas, afinal não sei quantas pastas e subpastas o usuário tem…
e depois…

to quebrando a cabeça, mas ta dificil…

Marky.Vasconcelos

Você pode criar um método que liste todos os arquivos de um File[] e se ele encontrar outro Diretorio(file.isDirectory()) chama o mesmo método.

T
class ListagemRecursiva {
    // Não vou fazer a lição de casa para você, mas vou dar o caminho das pedras, e você 
    // deve então fazer a parte de perfumaria. Com a variável "nivel" você pode fazer muita coisa.
    
    public void listar (File diretorio, int nivel) {
        File[] files = diretorio.listFiles();
        // Note que para mostrar os diretórios do jeito que você precisa,
        // é necessário primeiro listar os diretórios e então os arquivos. 
        
        // Listando os diretórios...
        for (int i = 0; i < files.length; ++i) {
             if (files[i].isDirectory()) {
                 System.out.println (nivel + " : " + files[i].getName());
                 // O pulo do gato: a chamada recursiva
                 listar (files[i], nivel + 1);
             }
        }
        // Listando então os arquivos...
        for (int i = 0; i < files.length; ++i) {
            if (files[i].isFile()) {
                System.out.println (nivel + " > " + files[i].getName());
            }
        }
    }

    public static void main(String[] args) {
        ListagemRecursiva lr = new ListagemRecursiva();
        lr.listar (new File ("."), 0);
    }
}
S

não, tranquilo…
com a ajuda de vcs já consegui fazer a parte mais dificil, pelomenos para mim.

o que estou encontrando dificuldade agora(pra nao dizer burrice minha) é nos contadores de espaços.
o que fiz até agora foi isso:

import javax.swing.*;
import java.io.*;

public class Teste{
	static String ndir;
	static String nfiles;
	public static void Arquivo(String entrada){
		nfiles += "   ";
		File dir = new File(entrada);
		String[] arquivos = dir.list();
		File[] dir2 = new File[arquivos.length];
		for (int i=0; i<arquivos.length; i++){
			dir2[i] = new File(dir, arquivos[i]);
			if( dir2[i].isDirectory() == true ){
				ndir += "   ";	
				System.out.println(ndir+dir2[i].getName()+"\");
				String temp = dir2[i].getPath();
				Arquivo(temp);
				ndir = "   ";				
			}
		}
		for( int i=0; i<arquivos.length; i++){
			if ( dir2[i].isFile() == true ){
				System.out.println(nfiles+"\"+dir2[i].getName());
			}
		}
		nfiles -= "   ";
	}
	public static void main(String[] args){
		String entrada = JOptionPane.showInputDialog("Entre com o diretório");
		File dir = new File(entrada);
		System.out.println(dir.getName()+"\");
		nfiles = "   ";
		ndir = "";
		Arquivo(entrada);
	}
}

mas mesmo assim, obrigado mesmo galera. nao imaginei que seria tão rapido com a ajuda de vcs.

S

btw, brigado pelo programa thiagol, mas realmente nao é legal pegar tudo mastigado de vcs, tenho que aprender ralando tb, não é justo nem com vcs…
mas mesmo assim, a sua ideia foi realmente foda, mas sabe como é, fazer o serviço todo para mim fica tão fácil haha.
vlw pela ajuda cara.

peczenyj

trim() ?
substring() ?

Marky.Vasconcelos

PS: Evite usar += com Strings

Use um StringBuilder

//Evite isso
String s = "";
for(int i = 0; i < 10;i++)
  s += "a";
//Prefira isso
StringBuilder sb = new StringBuilder();
String result;
for(int i = 0; i < 10;i++)
  s.append("a");
result = sb.toString();
S

show, nao conhecia essa classe, vou dar uma melhorada aqui. vlw cara.

Criado 19 de outubro de 2007
Ultima resposta 19 de out. de 2007
Respostas 9
Participantes 4