Как знать, что у меня есть файлы внутри моего ArrayList в java?

у меня есть один ArrayList<String> который amaceno файлы с расширением .pnd .ana .cnf с Вашими соответствующими именами. То, что я нуждаюсь в том, чтобы узнать, так это как то, чтобы спрашивать, если внутри ArrayList существует это три расширение, только расширение и НЕ имя полного файла с Вашим соответствующим расширением, из-за ej: если находят расширение .pnd и .ana, что ничего не сделал, если он находится .pnd и .cnf, что также ничего не сделал, но если внутри array находятся файлы только расширения .pnd, только что есть, что я реализовал действие, я объясняюсь? До настоящего времени и я бросаю следующее:

private void evaluarArchivos() {

        String pnd = ".pnd";
        String ana = ".ana";
        String cnf = ".cnf";
        private boolean archivoExistente = true;

        for (String evaluar : arrayArchivos) {
            if (evaluar.contains(pnd) || evaluar.contains(ana)) {
                archivoExistente = false;
                System.out.println("Nada");
            } 
            if (evaluar.contains(pnd) || evaluar.contains(cnf)) {
                archivoExistente = false;
                System.out.println("Nada 2");
            }
            if (evaluar.contains(pnd)) {
                archivoExistente = true;
                System.out.println("Hacer algo");
            }
        }
    }

Я использую свойство contains но всегда он возвращает меня true так как три расширение находится внутри arraylist всегда, и из-за каждого возвращения, которое дает мой метод buscarArchivos ingrementa то, у чего было больше, что он присоединяется ново.

 public void buscarArchivo(File ruta) {
//        Creo el vector que contendra todos los archivos de una ruta especificada.
        File[] archivo = ruta.listFiles();
//        Evaluo si la carpeta especificada contiene archivos.
        if (archivo != null) {
//            Recorro el vector el cual tiene almacenado la ruta del archivo a buscar.
            for (int i = 0; i < archivo.length; i++) {
                File Arc = archivo[i];
//                Evaluo si el archivo o la ruta es una carpeta.
                if (archivo[i].isDirectory()) {
//                    Le paso la nueva ruta de la carpeta si se cambia la ruta e busca nuevamente.
                    buscarArchivo(archivo[i]);
                } else {
//                    Evaluo el tipo de extencion. 
                    if (archivo[i].getName().endsWith(".pnd") || archivo[i].getName().endsWith(".ana") || archivo[i].getName().endsWith(".cnf")) {
                        contador++;
                        arrayArchivos.add(archivo[i].getName());

//                        System.out.println("Lo que hay en el array es: " + arrayArchivos);
                        evaluarArchivos();
                    }
                }
            }
        }
    }

Я думаю, что он возможно дает мне true потому что в каждом возвращении моего охотничьего рога моего метода buscarArchivo он добавляет постоянно новые файлы оставляя старики, что в искавшие в предыдущем возвращении, как он мог бы предотвращать это? Дело в том, что из-за каждого возвращения, который охотничьего рога добавляет меня к array, я это оценил, и в том, что я это удалил, в следующем возвращении, которое делает то же самое, и схватил последовательно. Иметь только в array файлы, которые находятся в каждом возвращении, которое дает, и не предыдущих. Nose, если я заставляю понимать себя...

Другое решение, которое я подумал, состоит в том, чтобы делать if внутри охотничьего рога оценивая, если не все расширение заканчивается с .pnd помещая мою переменную archivoExistente = false

                     if (archivo[i].getName().endsWith(".pnd") || archivo[i].getName().endsWith(".ana") || archivo[i].getName().endsWith(".cnf")) {
                        if(!archivo[i].getName().endsWith(".pnd")){
                            // Si no termina con .pnd implica que no todos los archivos son de esa extensión
                             archivoExistente = false;
                             System.out.println("Nada");
                        }
                        contador++;
                        arrayArchivos.add(archivo[i].getName());
                    }

Но оно я не функционирует, потому что он добавляет мне только расширение типа .pnd, и то, в чем я нуждаюсь, состоит в том, чтобы оценивать тип файлов, который есть внутри папки перед тем, как это добавлять или добавлять все файлы, которые находятся внутри папки, и потом оценивать, что тип расширения они. Я надеюсь, что они могут помогать мне. Спасибо

3
задан 12.08.2017, 14:33
3 ответа

Ты можешь использовать метод .split (". ") , у которых есть класс String, эта будет возвращать тебе array tokens, где ты будешь должен доставать последний элемент договоренности, чтобы знать который тип файла, будет, чтобы проверять, что только работал некий c¦digo, когда только будут существовать файлы .pnd, ты можешь использовать флаги оставаясь следующего способа:

private void evaluarArchivos(List arrayArchivos) {
    boolean existePnd = false,
            existeAna = false,
            existeCnf = false;

    for (String archivo : arrayArchivos) {
        String [] palabras = archivo.split(".");
        String ext = palabras[palabras.length() - 1];

        if (ext.equals("pnd"))
            existePnd = true;

        if (ext.equals("ana"))
            existeAna = true;

        if (ext.equals("cnf"))
            existeCnf = true;
    }
    if(existePnd && (!existeAna && !existeCnf)){
        //Codigo si solo existen archivos .pnd
    }
}
1
ответ дан 24.11.2019, 06:47
  • 1
    @z1IV3r спасибо за твою помощь, он я пошел очень ú til действительно! Но исследуя немножко, читая acá и няня encontré ошибка в твоем có я говорю, всегда мне давала excepció n java.lang. ArrayIndexOutOfBoundsException:-1, что приводило меня в линию String ext = palabras[palabras.length - 1]; SEGÚ N то, что и leí do он был, потому что в линии String[] palabras = archivo.split("."); из твоего có я говорю обеспеченный в ответе, mé совсем split (".") , если используется точка, должен приносить символы \** оставаясь así ** String [] слова = archivo.split (" \\."); – Gerardo Ferreyra 13.08.2017, 22:16
  • 2
    Так как точка используется в регулярных выражениях, из-за которого, если он хочет быть использованным как таковой, нужно определять с " \\" despué s из нескольких попыток ему удайтесь сделать часть, в котором он нуждался, моя проблема сейчас это у меня есть в ArrayList , я должен искать способ это опустошать в каждом возвращении, которое, потому что а всегда у меня останутся старые файлы, и условия, предложенные в ответе не выполняют благодаря тому, что в папке, где ищутся файлы, они присоединяются и удаляется постоянно расширение. Также твой ответ стоится, я даю ее, как стоится. Привет – Gerardo Ferreyra 13.08.2017, 22:22
  • 3
    Совершенный уважаемый, tendré в счете то, что ты комментируешь для будущих вопросов, он радует меня, что ты ayudó. – z1lV3r 14.08.2017, 18:53

@Gerardo Ferreyra, я думаю, что он всегда дает true из-за último if, который у тебя есть,

if (evaluar.contains(pnd)) {
            archivoExistente = true;
            System.out.println("Hacer algo");
        }

В этом if вопросов, если существуют файлы с extensi¦n ".pnd", но не, если это únicos, которые существуют, для чего ты должен добавлять условных, которых demÃ: s расширение не существовало:

if (evaluar.contains(pnd) && !evaluar.contains(ana) && !evaluar.contains(cnf)) {
            archivoExistente = true;
            System.out.println("Hacer algo");
        }
1
ответ дан 24.11.2019, 06:47

Используя streams из Java 8 он упрощается много:

long numeroExtensionesDiferentes = lista.stream()//se crea un stream
                .map(item->item.substring(item.lastIndexOf(".")+1))//quitamos la parte anterior a la extensión
                .distinct()//se eliminan los elementos(extensiones) duplicados
                .count();//se cuenta el número de elementos (extensiones)
1
ответ дан 24.11.2019, 06:47
  • 1
    có я говорю недостаток с фальшивым позитивом как troll.pdf.enganiado –  12.08.2017, 17:28
  • 2
    Он приспосабливается к примеру, который он давал. Для ló gicas má s сложные habrí в который менять часть substring на другой có я говорю má s приспособленный, но я понимаю, что не то, что он спрашивал. – pablo 13.08.2017, 01:44
  • 3
    Или ты можешь менять indexOf на lastIndexOf и я заношу в список. –  13.08.2017, 01:57