-4

Программа завершается кодом 0, но при этом не перемещает фото, не создает папки.

Содержание текстового файла:

20_02_2024_ 12_39 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0160.jpg _файл добавлен_
20_02_2024_ 12_39 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0161.jpg _файл добавлен_
Ст 11_2 кВ 278
20_02_2024_ 12_45 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0162.jpg _файл добавлен_
20_02_2024_ 12_45 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0164.jpg _файл добавлен_
20_02_2024_ 12_45 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0163.jpg _файл добавлен_
Ст 11_2 216
20_02_2024_ 13_05 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0165.jpg _файл добавлен_
20_02_2024_ 13_05 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0166.jpg _файл добавлен_
Ст 11_2 кВ 82
20_02_2024_ 17_32 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0204.jpg _файл добавлен_
20_02_2024_ 17_33 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0205.jpg _файл добавлен_
Ст 11_2 кВ 276
20_02_2024_ 17_42 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0206.jpg _файл добавлен_
20_02_2024_ 17_42 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0208.jpg _файл добавлен_
20_02_2024_ 17_42 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0207.jpg _файл добавлен_
Ст 11_2 кВ 272
20_02_2024_ 17_43 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0209.jpg _файл добавлен_
20_02_2024_ 17_43 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0210.jpg _файл добавлен_
Ст 11_2 кВ 211
20_02_2024_ 17_48 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0211.jpg _файл добавлен_
20_02_2024_ 17_48 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0212.jpg _файл добавлен_
Ст 11_2 кв 99
20_02_2024_ 17_54 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0213.jpg _файл добавлен_
20_02_2024_ 17_54 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0214.jpg _файл добавлен_
Ст 11_2 кВ 57
21_02_2024_ 08_44 _ Паша СантАвар_ _IMG_20240221_WA0103.jpg _файл добавлен_
Кор2кв155
21_02_2024_ 08_44 _ Паша СантАвар_ _IMG_20240221_WA0104.jpg _файл добавлен_
21_02_2024_ 09_22 _ Кирилл Сантехник Энергия_ _IMG_20240221_WA0109.jpg _файл добавлен_
21_02_2024_ 09_23 _ Кирилл Сантехник Энергия_ _IMG_20240221_WA0110.jpg _файл добавлен_
21_02_2024_ 09_23 _ Кирилл Сантехник Энергия_ Ст 11_2 кВ 268
21_02_2024_ 09_27 _ Нариман_ _IMG_20240221_WA0135.jpg _файл добавлен_
21_02_2024_ 09_28 _ Нариман_ _IMG_20240221_WA0136.jpg _файл добавлен_
21_02_2024_ 09_28 _ Нариман_ Столичная к 3 кВ 22
21_02_2024_ 09_38 _ Нариман_ _IMG_20240221_WA0137.jpg _файл добавлен_
21_02_2024_ 09_39 _ Нариман_ _IMG_20240221_WA0138.jpg _файл добавлен_
Столичная к 3 кВ 200
21_02_2024_ 09_40 _ Нариман_ _IMG_20240221_WA0139.jpg _файл добавлен_
Столичная к 3 кВ 200 _кухня_
21_02_2024_ 09_44 _ Нариман_ _IMG_20240221_WA0141.jpg _файл добавлен_
21_02_2024_ 09_44 _ Нариман_ _IMG_20240221_WA0142.jpg _файл добавлен_
Столичная к 3 кВ 180
21_02_2024_ 09_48 _ Нариман_ _IMG_20240221_WA0143.jpg _файл добавлен_
21_02_2024_ 09_49 _ Нариман_ _IMG_20240221_WA0144.jpg _файл добавлен_
Столичная к 3 кв 182
21_02_2024_ 09_54 _ Нариман_ _IMG_20240221_WA0145.jpg _файл добавлен_
21_02_2024_ 09_55 _ Нариман_ _IMG_20240221_WA0146.jpg _файл добавлен_
Ванная
21_02_2024_ 09_56 _ Нариман_ _IMG_20240221_WA0147.jpg _файл добавлен_
Кухня
21_02_2024_ 09_56 _ Нариман_ Столичка к3 кВ 161
21_02_2024_ 10_08 _ Нариман_ _IMG_20240221_WA0148.jpg _файл добавлен_
21_02_2024_ 10_08 _ Нариман_ _IMG_20240221_WA0149.jpg _файл добавлен_
21_02_2024_ 10_08 _ Нариман_ Столичная к 3 к 166
21_02_2024_ 10_14 _ Нариман_ _IMG_20240221_WA0150.jpg _файл добавлен_
Ванная
21_02_2024_ 10_15 _ Нариман_ _IMG_20240221_WA0151.jpg _файл добавлен_
Кухня
21_02_2024_ 10_16 _ Нариман_ _IMG_20240221_WA0152.jpg _файл добавлен_
21_02_2024_ 10_17 _ Нариман_ Столичная к 3 кВ 48
21_02_2024_ 10_20 _ Нариман_ _IMG_20240221_WA0153.jpg _файл добавлен_
21_02_2024_ 10_20 _ Нариман_ _IMG_20240221_WA0154.jpg _файл добавлен_
21_02_2024_ 10_20 _ Нариман_ Столичная к 3 кВ 5
21_02_2024_ 11_30 _ Макс Сант_ _IMG_20240221_WA0170.jpg _файл добавлен_
К1кв41
21_02_2024_ 11_31 _ Макс Сант_ _IMG_20240221_WA0171.jpg _файл добавлен_
21_02_2024_ 12_04 _ Макс Сант_ _IMG_20240221_WA0173.jpg _файл добавлен_
К1кв28
21_02_2024_ 12_48 _ Макс Сант_ _IMG_20240221_WA0174.jpg _файл добавлен_
К3кв185
21_02_2024_ 12_48 _ Макс Сант_ _IMG_20240221_WA0175.jpg _файл добавлен_
21_02_2024_ 12_52 _ Макс Сант_ _IMG_20240221_WA0176.jpg _файл добавлен_
К3кв191
21_02_2024_ 12_53 _ Макс Сант_ _IMG_20240221_WA0177.jpg _файл добавлен_
21_02_2024_ 12_58 _ Макс Сант_ _IMG_20240221_WA0178.jpg _файл добавлен_
К3кв192_су_
21_02_2024_ 12_59 _ Макс Сант_ _IMG_20240221_WA0179.jpg _файл добавлен_
21_02_2024_ 13_00 _ Макс Сант_ _IMG_20240221_WA0180.jpg _файл добавлен_
Кух
21_02_2024_ 13_08 _ Макс Сант_ _IMG_20240221_WA0181.jpg _файл добавлен_
К3кв73
21_02_2024_ 13_08 _ Макс Сант_ _IMG_20240221_WA0182.jpg _файл добавлен_
21_02_2024_ 13_13 _ Макс Сант_ _IMG_20240221_WA0183.jpg _файл добавлен_
К3кв54
21_02_2024_ 15_51 _ Макс Сант_ _IMG_20240221_WA0238.jpg _файл добавлен_
К3кв281
21_02_2024_ 15_51 _ Макс Сант_ _IMG_20240221_WA0239.jpg _файл добавлен_
21_02_2024_ 16_03 _ Макс Сант_ _IMG_20240221_WA0241.jpg _файл добавлен_
К3кв
21_02_2024_ 16_03 _ Макс Сант_ _IMG_20240221_WA0242.jpg _файл добавлен_
21_02_2024_ 16_11 _ Макс Сант_ _IMG_20240221_WA0243.jpg _файл добавлен_
К3кв228
21_02_2024_ 16_11 _ Макс Сант_ _IMG_20240221_WA0244.jpg _файл добавлен_
21_02_2024_ 16_17 _ Макс Сант_ _IMG_20240221_WA0245.jpg _файл добавлен_
К3кв239
21_02_2024_ 16_17 _ Макс Сант_ _IMG_20240221_WA0246.jpg _файл добавлен_
21_02_2024_ 16_22 _ Макс Сант_ _IMG_20240221_WA0247.jpg _файл добавлен_
К3кв45
21_02_2024_ 16_22 _ Макс Сант_ _IMG_20240221_WA0248.jpg _файл добавлен_
21_02_2024_ 16_33 _ Макс Сант_ _IMG_20240221_WA0249.jpg _файл добавлен_
К3кв171
21_02_2024_ 16_33 _ Макс Сант_ _IMG_20240221_WA0251.jpg _файл добавлен_
21_02_2024_ 16_39 _ Макс Сант_ _IMG_20240221_WA0252.jpg _файл добавлен_
К3кв107
21_02_2024_ 16_40 _ Макс Сант_ _IMG_20240221_WA0253.jpg _файл добавлен_
21_02_2024_ 17_07 _ Нариман_ _IMG_20240221_WA0258.jpg _файл добавлен_
21_02_2024_ 17_07 _ Нариман_ _IMG_20240221_WA0259.jpg _файл добавлен_
21_02_2024_ 17_10 _ Нариман_ Ст к3 кВ 196
21_02_2024_ 17_19 _ Нариман_ _IMG_20240221_WA0264.jpg _файл добавлен_
21_02_2024_ 17_19 _ Нариман_ _IMG_20240221_WA0265.jpg _файл добавлен_
21_02_2024_ 17_19 _ Нариман_ Ст к 3 кВ 101
21_02_2024_ 17_24 _ Нариман_ _IMG_20240221_WA0275.jpg _файл добавлен_
21_02_2024_ 17_24 _ Нариман_ _IMG_20240221_WA0276.jpg _файл добавлен_
21_02_2024_ 17_24 _ Нариман_ Ст к 3 кВ 151
21_02_2024_ 17_29 _ Нариман_ _IMG_20240221_WA0282.jpg _файл добавлен_
21_02_2024_ 17_29 _ Нариман_ _IMG_20240221_WA0284.jpg _файл добавлен_
21_02_2024_ 17_30 _ Нариман_ _IMG_20240221_WA0286.jpg _файл добавлен_
Кухня
21_02_2024_ 17_30 _ Нариман_ Ст к 3 к 32
21_02_2024_ 17_36 _ Иван_ _IMG_20240221_WA0260.jpg _файл добавлен_
21_02_2024_ 17_36 _ Иван_ _IMG_20240221_WA0262.jpg _файл добавлен_
21_02_2024_ 17_36 _ Иван_ _IMG_20240221_WA0261.jpg _файл добавлен_
21_02_2024_ 17_42 _ Нариман_ _IMG_20240221_WA0293.jpg _файл добавлен_
21_02_2024_ 17_42 _ Нариман_ _IMG_20240221_WA0294.jpg _файл добавлен_
21_02_2024_ 17_42 _ Нариман_ Столичка к 2 кВ 9
22_02_2024_ 09_56 _ Нариман_ _IMG_20240222_WA0136.jpg _файл добавлен_
22_02_2024_ 09_56 _ Нариман_ _IMG_20240222_WA0137.jpg _файл добавлен_
22_02_2024_ 09_57 _ Нариман_ _IMG_20240222_WA0138.jpg _файл добавлен_
Кухня
22_02_2024_ 09_57 _ Нариман_ Ст к3 кВ 304
22_02_2024_ 10_02 _ Нариман_ _IMG_20240222_WA0139.jpg _файл добавлен_
22_02_2024_ 10_02 _ Нариман_ _IMG_20240222_WA0140.jpg _файл добавлен_
22_02_2024_ 10_02 _ Нариман_ Столичная к3 кВ 293
22_02_2024_ 10_11 _ Нариман_ _IMG_20240222_WA0142.jpg _файл добавлен_
22_02_2024_ 10_12 _ Нариман_ _IMG_20240222_WA0143.jpg _файл добавлен_
Кухня
22_02_2024_ 10_12 _ Нариман_ _IMG_20240222_WA0144.jpg _файл добавлен_
22_02_2024_ 10_12 _ Нариман_ Столичная к3 кВ 97
22_02_2024_ 10_18 _ Нариман_ Столичная к 3 кВ 93
22_02_2024_ 10_23 _ Нариман_ _IMG_20240222_WA0145.jpg _файл добавлен_
22_02_2024_ 10_23 _ Нариман_ _IMG_20240222_WA0146.jpg _файл добавлен_
22_02_2024_ 10_23 _ Нариман_ _IMG_20240222_WA0147.jpg _файл добавлен_
22_02_2024_ 10_24 _ Нариман_ _IMG_20240222_WA0148.jpg _файл добавлен_
22_02_2024_ 10_24 _ Нариман_ Столичная к 3 кВ 69
22_02_2024_ 10_29 _ Нариман_ _IMG_20240222_WA0149.jpg _файл добавлен_
22_02_2024_ 10_29 _ Нариман_ _IMG_20240222_WA0150.jpg _файл добавлен_
22_02_2024_ 10_30 _ Нариман_ Столичка к3 кВ 38
22_02_2024_ 10_43 _ Нариман_ _IMG_20240222_WA0152.jpg _файл добавлен_
22_02_2024_ 10_43 _ Нариман_ _IMG_20240222_WA0151.jpg _файл добавлен_
22_02_2024_ 10_44 _ Нариман_ Ст к 2 кВ 284
22_02_2024_ 11_51 _ Нариман_ _IMG_20240222_WA0165.jpg _файл добавлен_
22_02_2024_ 11_51 _ Нариман_ _IMG_20240222_WA0166.jpg _файл добавлен_
22_02_2024_ 11_52 _ Нариман_ Столичная к3 квартира 291
22_02_2024_ 12_06 _ Нариман_ _IMG_20240222_WA0168.jpg _файл добавлен_
22_02_2024_ 12_06 _ Нариман_ _IMG_20240222_WA0171.jpg _файл добавлен_
22_02_2024_ 12_07 _ Нариман_ _IMG_20240222_WA0170.jpg _файл добавлен_
22_02_2024_ 12_07 _ Нариман_ Кухня
22_02_2024_ 12_09 _ Нариман_ Столичная к3 кВ 216
22_02_2024_ 12_14 _ Нариман_ _IMG_20240222_WA0169.jpg _файл добавлен_
22_02_2024_ 12_14 _ Нариман_ _IMG_20240222_WA0172.jpg _файл добавлен_
22_02_2024_ 12_14 _ Нариман_ Ст к 3 кВ 157
22_02_2024_ 12_19 _ Нариман_ _IMG_20240222_WA0173.jpg _файл добавлен_
22_02_2024_ 12_20 _ Нариман_ _IMG_20240222_WA0174.jpg _файл добавлен_
22_02_2024_ 12_21 _ Нариман_ Ст к 3 квартира 113
22_02_2024_ 12_21 _ Нариман_ _IMG_20240222_WA0175.jpg _файл добавлен_
Кухнях
22_02_2024_ 12_26 _ Нариман_ _IMG_20240222_WA0176.jpg _файл добавлен_
22_02_2024_ 12_27 _ Нариман_ _IMG_20240222_WA0177.jpg _файл добавлен_
22_02_2024_ 12_28 _ Нариман_ Столичка к3 кВ 117
22_02_2024_ 12_34 _ Нариман_ _IMG_20240222_WA0178.jpg _файл добавлен_
22_02_2024_ 12_34 _ Нариман_ _IMG_20240222_WA0179.jpg _файл добавлен_
22_02_2024_ 12_34 _ Нариман_ _IMG_20240222_WA0180.jpg _файл добавлен_
22_02_2024_ 12_34 _ Нариман_ Столичная к 3 кВ 98
22_02_2024_ 12_46 _ Нариман_ _IMG_20240222_WA0181.jpg _файл добавлен_
22_02_2024_ 12_47 _ Нариман_ _IMG_20240222_WA0182.jpg _файл добавлен_
Кухня
22_02_2024_ 12_59 _ Нариман_ Столичная к 3 кВ 13
22_02_2024_ 13_01 _ Нариман_ _IMG_20240222_WA0185.jpg _файл добавлен_
22_02_2024_ 13_01 _ Нариман_ _IMG_20240222_WA0186.jpg _файл добавлен_
22_02_2024_ 15_51 _ Паша СантАвар_ _IMG_20240222_WA0248.jpg _файл добавлен_
22_02_2024_ 15_51 _ Паша СантАвар_ _IMG_20240222_WA0249.jpg _файл добавлен_
Кор3кв261
22_02_2024_ 15_55 _ Паша СантАвар_ _IMG_20240222_WA0250.jpg _файл добавлен_
Кор3кв269
22_02_2024_ 15_55 _ Паша СантАвар_ _IMG_20240222_WA0251.jpg _файл добавлен_
22_02_2024_ 16_02 _ Паша СантАвар_ _IMG_20240222_WA0252.jpg _файл добавлен_
Кор3кв202
22_02_2024_ 16_02 _ Паша СантАвар_ _IMG_20240222_WA0253.jpg _файл добавлен_
22_02_2024_ 16_12 _ Паша СантАвар_ _IMG_20240222_WA0254.jpg _файл добавлен_
Кор3кв25
22_02_2024_ 16_12 _ Паша СантАвар_ _IMG_20240222_WA0255.jpg _файл добавлен_
22_02_2024_ 16_21 _ Паша СантАвар_ _IMG_20240222_WA0256.jpg _файл добавлен_
22_02_2024_ 16_21 _ Паша СантАвар_ _IMG_20240222_WA0257.jpg _файл добавлен_
Кор3кв65
22_02_2024_ 16_30 _ Паша СантАвар_ _IMG_20240222_WA0258.jpg _файл добавлен_
Кор3кв65 кухня
22_02_2024_ 18_48 _ Нариман_ _IMG_20240222_WA0277.jpg _файл добавлен_
22_02_2024_ 18_48 _ Нариман_ _IMG_20240222_WA0278.jpg _файл добавлен_
22_02_2024_ 18_48 _ Нариман_ _IMG_20240222_WA0279.jpg _файл добавлен_
22_02_2024_ 18_48 _ Нариман_ Столичная к3 к33

А вот код:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PhotoOrganizer {

public static void main(String[] args) {
    String directoryPath = "E:\\Stolichka\\Obhod_stolicki\\Photo_text";
    organizePhotos(directoryPath);
}

public static void organizePhotos(String directoryPath) {
    File directory = new File(directoryPath);
    File[] files = directory.listFiles();

    if (files != null) {
        for (File file : files) {
            if (file.getName().endsWith(".txt")) {
                try {
                    organizePhotosFromTxtFile(file);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

public static void organizePhotosFromTxtFile(File txtFile) throws IOException {
    String txtFilePath = txtFile.getParent();
    BufferedReader reader = new BufferedReader(new FileReader(txtFile));
    String line;

    while ((line = reader.readLine()) != null) {
        if (line.contains(".jpg")) {
            String fileName = extractFileName(line);
            String apartmentInfo = extractApartmentInfo(line);

            if (fileName != null && apartmentInfo != null) {
                movePhotoToApartmentFolder(txtFilePath, fileName, apartmentInfo);
            } else {
                // Если не удалось извлечь имя файла или информацию о квартире, переходим к следующей строке
                System.out.println("Не удалось извлечь имя файла или информацию о квартире из строки: " + line);
            }
        }
    }

    reader.close();
}

public static String extractFileName(String line) {
    Pattern pattern = Pattern.compile("IMG_.*?\\.jpg");
    Matcher matcher = pattern.matcher(line);

    if (matcher.find()) {
        return matcher.group();
    }

    return null;
}

public static String extractApartmentInfo(String line) {
    Pattern pattern = Pattern.compile(".*[кК]\\s*(\\d+).*[кК]\\s*(\\d+).*");
    Matcher matcher = pattern.matcher(line);

    if (matcher.find()) {
        String buildingNumber = matcher.group(1);
        String apartmentNumber = matcher.group(2);
        return buildingNumber + "_" + apartmentNumber;
    }

    return null;
}

public static void movePhotoToApartmentFolder(String txtFilePath, String fileName, String apartmentInfo) {
    Path sourcePath = Paths.get(txtFilePath).resolve(fileName);

    String[] parts = apartmentInfo.split("_");
    String buildingNumber = parts[0];
    String apartmentNumber = parts[1];

    String buildingFolderPath = 
Paths.get(txtFilePath).resolve("obhodStolichki").resolve(buildingNumber).toString();
    String apartmentFolderPath = 
Paths.get(buildingFolderPath).resolve(apartmentNumber).toString();

    try {
        Files.createDirectories(Paths.get(buildingFolderPath));
        Files.createDirectories(Paths.get(apartmentFolderPath));

        Path destinationPath = Paths.get(apartmentFolderPath).resolve(fileName);

        Files.move(sourcePath, destinationPath);

        System.out.println("Moved " + fileName + " to " + apartmentFolderPath);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

Nowhere Man
  • 15,995
  • 33
  • 19
  • 29

1 Answers1

0

Данная программа выполняет ровно то, что в ней написано, и к тому же кроме возвращения 0 печатает массу информации в консоль / системный поток вывода типа такой:

Не удалось извлечь имя файла или информацию о квартире из строки: 20_02_2024_ 12_39 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0160.jpg _файл добавлен_
Не удалось извлечь имя файла или информацию о квартире из строки: 20_02_2024_ 12_39 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0161.jpg _файл добавлен_
Не удалось извлечь имя файла или информацию о квартире из строки: 20_02_2024_ 12_45 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0162.jpg _файл добавлен_
Не удалось извлечь имя файла или информацию о квартире из строки: 20_02_2024_ 12_45 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0164.jpg _файл добавлен_
Не удалось извлечь имя файла или информацию о квартире из строки: 20_02_2024_ 12_45 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0163.jpg _файл добавлен_
...

и так для всех строк из указанного файла.

Если посмотреть внимательнее на данные в текстовом файле, легко понять, что информация о квартире содержится в отдельной строке перед строками, содержащими информацию о фотографиях:

...
Квартира: Столичная к 3 кВ 200
Фото 1:   21_02_2024_ 09_40 _ Нариман_ _IMG_20240221_WA0139.jpg _файл добавлен_
Квартира: Столичная к 3 кВ 200 _кухня_
Фото 1:   21_02_2024_ 09_44 _ Нариман_ _IMG_20240221_WA0141.jpg _файл добавлен_
Фото 2:   21_02_2024_ 09_44 _ Нариман_ _IMG_20240221_WA0142.jpg _файл добавлен_
и т.д.

А "наивная" реализация метода organizePhotosFromTxtFile предполагает, что все данные находятся в одной и той же строке.

Кроме того, существующий шаблон для поиска информации о квартире сможет корректно обнаружить лишь три квартиры в представленном файле.

Поэтому следует либо отредактировать файл с данными, чтобы он соответствовал формату, который может обработать текущая реализация, либо изменить реализацию, чтобы она соответствовала реальному формату данных в файле.

Пример исправленной реализации с отладочной информацией (счётчиками строк):

public static void organizePhotosFromTxtFile(File txtFile) throws IOException {
    try (BufferedReader reader = new BufferedReader(new FileReader(txtFile))) {
        String line;
        int okCount = 0;
        int failCount = 0;
        int skipCount = 0;
        int aptCount = 0;
    String apartmentInfo = null;  // данные о текущей квартире
    String fileName = null;       // имя файла

    int lc = 0;                   // общий счётчик строк
    while ((line = reader.readLine()) != null) {
        lc++;

        if (line.contains("jpg")) {
            if (apartmentInfo == null) { // квартира неизвестна, пропускаем
                skipCount++;
                // System.out.println("Пропускаем строку №" + lc + ": " + line);
            } else {
                fileName = extractFileName(line);
                if (fileName != null) {
                    okCount++;
                    movePhotoToApartmentFolder(txtFile.getParent(), fileName, apartmentInfo);
                } else {
                    System.out.println("Не удалось извлечь имя файла из строки № " + lc + ": " + line);
                    failCount++;
                }
            }
        } else { // вычисляем квартиру
            String apartment = extractApartmentInfo(line);
            if (apartment != null) {
                apartmentInfo = apartment;
                System.out.println("№ " + lc + ": " + apartmentInfo);
                aptCount++;
                fileName = null; // сброс данных о файле
            } else {
                if (apartmentInfo == null) {
                    System.out.println("Не удалось извлечь имя файла или информацию о квартире из строки № " + lc + ": " + line);
                    failCount++;
                } else {
                    // System.out.println("Пропускаем строку №" + lc + ": " + line);
                    skipCount++;
                }
            }
        }
    }

    System.out.println("Всех строк:       " + lc);
    System.out.println("Пропущено строк:  " + skipCount);
    System.out.println("Корректных строк: " + okCount);
    System.out.println("Найдено квартир : " + aptCount);
    System.out.println("Неверных строк:   " + failCount);
}

}

Соответственно, шаблон для поиска квартир следует изменить хотя бы следующим образом, чтобы правильно обрабатывались префиксы (без учёта регистра) "кВ", "квартира":

static final Pattern APT_PATTERN = Pattern.compile("(?ui).*[к]\\s*(\\d+).*к(в|вартира)?\\s*(\\d+).*");
public static String extractApartmentInfo(String line) {
    Matcher matcher = APT_PATTERN.matcher(line);
if (matcher.find()) {
    String buildingNumber = matcher.group(1);
    String apartmentNumber = matcher.group(3);
    return buildingNumber + "_" + apartmentNumber;
}

return null;

}

Результат выполнения исправленного метода:

Не удалось извлечь имя файла или информацию о квартире из строки № 3: Ст 11_2 кВ 278
Не удалось извлечь имя файла или информацию о квартире из строки № 7: Ст 11_2 216
Не удалось извлечь имя файла или информацию о квартире из строки № 10: Ст 11_2 кВ 82
Не удалось извлечь имя файла или информацию о квартире из строки № 13: Ст 11_2 кВ 276
Не удалось извлечь имя файла или информацию о квартире из строки № 17: Ст 11_2 кВ 272
Не удалось извлечь имя файла или информацию о квартире из строки № 20: Ст 11_2 кВ 211
Не удалось извлечь имя файла или информацию о квартире из строки № 23: Ст 11_2 кв 99
Не удалось извлечь имя файла или информацию о квартире из строки № 26: Ст 11_2 кВ 57
Не удалось извлечь имя файла или информацию о квартире из строки № 28: Кор2кв155
Не удалось извлечь имя файла или информацию о квартире из строки № 32: 21_02_2024_ 09_23 _ Кирилл Сантехник Энергия_ Ст 11_2 кВ 268
№ 35: 3_22
№ 38: 3_200
№ 40: 3_200
№ 43: 3_180
№ 46: 3_182
№ 52: 3_161
№ 55: 3_166
№ 61: 3_48
№ 64: 3_5
№ 66: 1_41
№ 69: 1_28
№ 71: 3_185
№ 74: 3_191
№ 77: 3_192
№ 82: 3_73
№ 85: 3_54
№ 87: 3_281
№ 93: 3_228
№ 96: 3_239
№ 99: 3_45
№ 102: 3_171
№ 105: 3_107
№ 109: 3_196
№ 112: 3_101
№ 115: 3_151
№ 120: 3_32
№ 126: 2_9
№ 131: 3_304
№ 134: 3_293
№ 139: 3_97
№ 140: 3_93
№ 145: 3_69
№ 148: 3_38
№ 151: 2_284
№ 154: 3_291
№ 159: 3_216
№ 162: 3_157
№ 165: 3_113
№ 170: 3_117
№ 174: 3_98
№ 178: 3_13
№ 201: 3_33
Всех строк:       201
Пропущено строк:  42
Корректных строк: 107
Найдено квартир : 42
Неверных строк:   10

Если улучшить шаблон, чтобы обрабатывались префиксы "кор" и "ст" для корпуса/строения, то будут извлечены практически все данные из представленного файла:

static final Pattern APT_PATTERN = Pattern.compile("(?ui).*(к(ор)?|ст)\\s*([_0-9]+).*(к(в|вартира)?)?\\s*(\\d+).*");
public static String extractApartmentInfo(String line) {
    Matcher matcher = APT_PATTERN.matcher(line);
if (matcher.find()) {
    String buildingNumber = matcher.group(3);
    String apartmentNumber = matcher.group(6);
    return buildingNumber + "_" + apartmentNumber;
}

return null;

}

Пропускаем строку №1: 20_02_2024_ 12_39 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0160.jpg _файл добавлен_
Пропускаем строку №2: 20_02_2024_ 12_39 _ Кирилл Сантехник Энергия_ _IMG_20240220_WA0161.jpg _файл добавлен_
№ 3: 11_2_8
№ 7: 11_2_6
№ 10: 11_2_2
№ 13: 11_2_6
№ 17: 11_2_2
№ 20: 11_2_1
№ 23: 11_2_9
№ 26: 11_2_7
№ 28: 2_5
№ 32: 11_2_8
№ 35: 3_2
№ 38: 3_0
№ 40: 3_0
№ 43: 3_0
№ 46: 3_2
Пропускаем строку №49: Ванная
Пропускаем строку №51: Кухня
№ 52: 3_1
№ 55: 16_6
Пропускаем строку №57: Ванная
Пропускаем строку №59: Кухня
№ 61: 3_8
№ 64: 3_5
№ 66: 1_1
№ 69: 1_8
№ 71: 3_5
№ 74: 3_1
№ 77: 3_2
Пропускаем строку №80: Кух
№ 82: 3_3
№ 85: 3_4
№ 87: 3_1
Пропускаем строку №90: К3кв
№ 93: 3_8
№ 96: 3_9
№ 99: 3_5
№ 102: 3_1
№ 105: 3_7
№ 109: 3_6
№ 112: 3_1
№ 115: 3_1
Пропускаем строку №119: Кухня
№ 120: 3_2
№ 126: 2_9
Пропускаем строку №130: Кухня
№ 131: 3_4
№ 134: 3_3
Пропускаем строку №137: Кухня
№ 139: 3_7
№ 140: 3_3
№ 145: 3_9
№ 148: 3_8
№ 151: 2_4
№ 154: 3_1
Пропускаем строку №158: 22_02_2024_ 12_07 _ Нариман_ Кухня
№ 159: 3_6
№ 162: 3_7
№ 165: 3_3
Пропускаем строку №167: Кухнях
№ 170: 3_7
№ 174: 3_8
Пропускаем строку №177: Кухня
№ 178: 3_3
№ 183: 3_1
№ 185: 3_9
№ 188: 3_2
№ 191: 3_5
№ 195: 3_5
№ 197: 3_5
№ 201: 3_3
Всех строк:       201
Пропущено строк:  14
Корректных строк: 129
Найдено квартир : 58
Неверных строк:   0
Nowhere Man
  • 15,995
  • 33
  • 19
  • 29