Как проверить, содержат ли элементы в именах файлов в папке имена строк в массиве строк? - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь выполнить поиск в папке изображений, чтобы проверить, содержит ли каждый путь изображения в папке элементы String из моего ArrayList.Если путь к файлу содержит строковый элемент, я хочу добавить его в новый массив строк.Это то, что я до сих пор.Пути к изображениям, которые соответствуют строкам в списке массивов, правильно распечатываются в цикле for, но вне этого он выводит ноль.

/*ArrayList content:
   Snow Fall.jpg
   Soft snow.jpg 
   Winter Wonderland.jpg
*/


public void getImages(ArrayList<String> theImagesArrayList) {

    File dir = new File("C:/Users/someone/Desktop/slideshow images");

    int count=0;
    File[] files = dir.listFiles();
    file = new String[theImagesArrayList.size()];

    for (int i = 0; i < theImagesArrayList.size(); i++) {
        for (File b : files) {
            if (theImagesArrayList.contains(b.getName())) {
                    count++;
                    if(count<=theImagesArrayList.size()){
                        file[i] = b.getPath();
                        System.out.println(file[i]);
                        /*Output from above print statement:

                         C:\Users\someone\Desktop\slideshow images\Snow Fall.jpg
                         C:\Users\someone\Desktop\slideshow images\Soft snow.jpg
                         C:\Users\someone\Desktop\slideshow images\Winter Wonderland.jpg
                         */

                }
            }
        }
    }
    System.out.println(" ");
    for(String c: file){
        System.out.println(c);
    }
    /*Output above loop:

      C:\Users\someone\Desktop\slideshow images\Winter Wonderland.jpg
      null
      null
     */
    }
  }
 }
}

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Значение переменной «i» во внутреннем цикле всегда равно 0 на первой итерации, поэтому после присваивания значение «i» не увеличивается, поэтому всегда оно переопределяется на самое последнее значение.

Вместо выражения: file [i] = b.getPath ();

Вы можете использовать выражение вроде: file [j ++] = b.getPath ();// декальрируем и инициализируем j = 0 раньше.

0 голосов
/ 07 июня 2018

Это count++ проблема.file[i] = b.getPath(); выполняется все три раза в первой внешней итерации, и не более в следующих.Итак, все три пути записаны в file[0].Вот почему file[1] и file[2] остаются нулевыми.

Попробуйте break; после инструкции System.out.println(file[i]);.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...