Как исправить неправильный вывод контента. - PullRequest
2 голосов
/ 18 октября 2019

Я пытаюсь разрешить Java читать все файлы в каталоге и сравнивать имена файлов со списком строк, если имя файла совпадает со строкой в ​​списке, должно быть выведено имя файла + «хит». Теперь я получил удар только по одному файлу.

попадание в папку содержит: foto5.jpeg yH1laMN0s7g.jpeg RdrzTHAvcQg.jpeg

Список lijst.txt содержит: foto5.jpeg yH1laMN0s7g.jpeg RdrzTHAvcgg * j5g *55должен получить: foto5 Хит! RdrzTHAvcQg Хит! yH1laMN0s7g Хит!

Но теперь я получаю: foto5 * RdrzTHAvcQg Хит! yH1laMN0s7g *

Я попытался поиграть с кодировкой, которая сейчас называется UTF-8. Но я не думаю, что это проблема.

 public static void main(String[] args) {
    // TODO Auto-generated method stub
    String hit = ""; // empty string

    File files = new File("C:\\Users\\bram\\Pictures\\hit");
    File[] sourceFiles = files.listFiles();  // the files in the map hit java reads

    List<String> lines = new ArrayList<String>();
    try {
        lines = FileUtils.readLines(new File("C:\\lijst.txt"), "utf-8");
    } catch (IOException e2) {
    }  // java reads strings in the list

    for (File x: sourceFiles) {  // java iterates through all the files in the folder hits. 

        String names = x.getName().replaceAll("\\.[^.]*$", "").toString(); 
        // java gets the filenames and converts them to strings without the extension

        for (String a : lines) // for all strings in the list:
        {   
            //System.out.println(a);
            if(names.contentEquals(a))  // if the name is equel to one of the strings in the list it generates a hit
            {
                hit = "Hit!";
            }else {
                hit = "*";              // no hit is * 
            }
        }

    System.out.println(x.getName().replaceAll("\\.[^.]*$", "").toString() +"         "+ hit); // print the results

    }

  }

  }

Ответы [ 2 ]

2 голосов
/ 18 октября 2019

Вы слишком усложняете вещи. Почему вы удаляете расширения файлов, хотя ваш текстовый файл содержит полные имена ваших файлов изображений? почему вложенный цикл? Разве не достаточно чего-то подобного ниже?

for (File x : sourceFiles) {            
        if(lines.contains(x.getName())){
            System.out.println(x.getName()+"\t Hit!");
        }
        else{
            System.out.println(x.getName()+"\t *");
        }
    }
1 голос
/ 18 октября 2019

Ладно, извините, ребята .. Это был долгий день. Список со строками не содержал никаких расширений. Неправильная информация с моей стороны, извините.

Я получил это сейчас, просто перерыв в цикле for. Спасибо за ответы!

for (String a : lines) // for all strings in the list:
        {   
            //System.out.println(a);
            if(names.contentEquals(a))  
            {
                hit = "Hit!";
                break;
            }else {
                hit = "*";              // no hit is * 
            }

        }
...