AJUDA EM JAVA, Cade os gênios da programação?

13 respostas
S

Esse é o código… Basicamente oque eles esta fazendo puxar os arquivos das pastas… o que esta de errado ?? Ele esta deixando alguns arquivos para tras… oque eu tenho q mudar pra ele puxar TODOS os arquivos ???
Pelo que eu vi, o problema esta aqui:

private List loadFolderList(Path directory) {

List folders = new ArrayList<>();

try (DirectoryStream directoryStream = Files.newDirectoryStream(directory))

Mas ai não sei oque fazer pra mudar, sou iniciante em java então to meio perdido…
Segue os códigos completo:

private List loadFolderList(Path directory) {

List folders = new ArrayList<>();

try (DirectoryStream directoryStream = Files.newDirectoryStream(directory)) {

for (Path path : directoryStream) {

if (Files.isDirectory(path)) {

JsonFileLog fileLog = new JsonFileLog();

fileLog.setName(path.getFileName().toString());

fileLog.setFileNameList(loadFileNameList(Global.LOG_PATH.resolve(path.getFileName())));

folders.add(fileLog);

}

}

} catch (IOException ex) {

log.error(Não foi possível ler diretório de log., ex);

}

return folders;

}

13 Respostas

Lucas_Camara

Ele deixa que tipos de arquivos para trás? Arquivos que estão dentro de outras pastas (que estão dentro da pasta raiz)? Somente arquivos de um determinado tipo?

S

Desculpa escrevi errado, é uma pasta apenas… e ele não esta puxando TODOS os aquivos dessa pasta

S

log de arquivo JSON. Não, são varios arquivos, mas os arquivos log… não esta pegando…

Lucas_Camara

como é essa estrutura de pasta que vc quer ler?

Lucas_Camara

Então, esse é soh o caminho, mas como eh a estrutura dentro dessa pasta?

S

Possue varios arquivos…
o metodo atual pega só os arquivos que estão dentro das pastas
o mlr deixa uma pasta antes os arquivos de log
preciso que pegue tanto os arquivos das pastas como a da pasta anterior…
Segue abaixo:

public String findFilesLog() {

try  {

folderList = loadFolderList(

Paths.get(String.format("%s/log", Environment.getBaseDir())));
Collections.sort(folderList, (JsonFileLog o1, JsonFileLog o2)
            -> o1.getName().compareTo(o2.getName()));

    } catch (Exception e) {
        error = "Error : " + e;
    }
    return SUCCESS;
}



private List<JsonFileLog> loadFolderList(Path directory) {
    List<JsonFileLog> folders = new ArrayList<>();
    try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(directory)) {
        for (Path path : directoryStream) {
            if (Files.isDirectory(path)) {
                JsonFileLog fileLog = new JsonFileLog();
                fileLog.setName(path.getFileName().toString());
                fileLog.setFileNameList(loadFileNameList(Global.LOG_PATH.resolve(path.getFileName())));
                folders.add(fileLog);
            }
        }
    } catch (IOException ex) {
        log.error("Não foi possível ler diretório de log.", ex);
    }
    return folders;
}


private List<String> loadFileNameList(Path directory) {
    List<String> lineNameList = new ArrayList<>();

    if(Files.exists(directory)) {
        try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(directory)) {
            for (Path path : directoryStream) {
                if (!Files.isDirectory(path)) {
                    lineNameList.add(path.getFileName().toString());
                }
            }
        } catch (IOException ex) {
            log.error("Não foi possível ler diretório de log.", ex);
        }
        Collections.sort(lineNameList);
        //datas atuais primeiro
        Collections.reverse(lineNameList);
    }
    return lineNameList;
}

}

Lucas_Camara

Acho que tu vai ter que ler os arquivos a partir da pasta raiz e ler os arquivos das demais pastas usando um método recursivo.

S

Como é feito esse método ??

Lucas_Camara
package com.mkyong.example;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class JavaExample {

    public static void main(String[] args) {

        final File folder = new File("C:\\projects");

        List<String> result = new ArrayList<>();

        search(".*\\.java", folder, result);

        for (String s : result) {
            System.out.println(s);
        }

    }

    public static void search(final String pattern, final File folder, List<String> result) {
        for (final File f : folder.listFiles()) {

            if (f.isDirectory()) {
                search(pattern, f, result);
            }

            if (f.isFile()) {
                if (f.getName().matches(pattern)) {
                    result.add(f.getAbsolutePath());
                }
            }

        }
    }
    
}

FONTE: https://mkyong.com/java/java-how-to-list-all-files-in-a-directory/

S

Esse método eu coloco no lugar do que ja esta feito ou coloco depois ??

Lucas_Camara

Você soh precisa chamar o método search passando a pasta (File folder) e a lista (List<String> result. E essa lista será populada com os paths de todos os arquivos contidos na pasta informada (e em todas as pastas tb, recursivamente). O primeiro parâmetro (String pattern) não precisa, vc pode tirar.

O resultado da chamada à esse método, será a lista preenchida para vc poder continuar sua lógica.

S

ta isso eu entendi, mas onde eu colo exatamente?? rsrs
depois do fechamento do public string findfileslog ou depois do fechamento do private list ou depois do fechamento do private list ??

Lucas_Camara

Em vez de usar esse findFilesLog, vc vai usar o método search. E também não vai precisar mais desse loadFolderList.

Criado 7 de abril de 2020
Ultima resposta 13 de abr. de 2020
Respostas 13
Participantes 2