Программа не выполняет свою функцию
Программа завершается кодом 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();
}
}
}
Ответы (1 шт):
Данная программа выполняет ровно то, что в ней написано, и к тому же кроме возвращения 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