Created
May 22, 2025 07:03
-
-
Save untainsYD/ddee717484db8efe3de77b6f95458112 to your computer and use it in GitHub Desktop.
Laboratory 5, Task 3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package lab5; | |
import lab5.archive.ArchiveReader; | |
import lab5.archive.AcademicGroup; | |
import java.io.File; | |
import java.util.List; | |
import java.util.Scanner; | |
/** | |
* Демонстрація читання академічних груп з ZIP-архіву. | |
*/ | |
public class Task3Reader { | |
public static void main(String[] args) { | |
System.out.println("====== Лабораторна робота №5 - Завдання 3 (Читання) ======"); | |
System.out.println("Читання академічних груп з ZIP-архіву\n"); | |
Scanner scanner = new Scanner(System.in); | |
try { | |
// Запитуємо у користувача шлях до архіву або використовуємо останній створений | |
String archiveFileName = getArchiveFileName(scanner); | |
if (archiveFileName == null || !new File(archiveFileName).exists()) { | |
System.err.println("Файл архіву не знайдено: " + archiveFileName); | |
System.err.println("Спочатку запустіть Task3Writer для створення архіву."); | |
return; | |
} | |
// Читання з архіву | |
System.out.println("=== Читання з архіву ==="); | |
List<AcademicGroup> groups = ArchiveReader.readGroupsFromArchive(archiveFileName); | |
if (groups.isEmpty()) { | |
System.out.println("Архів не містить академічних груп."); | |
return; | |
} | |
// Виведення детальної інформації | |
ArchiveReader.displayGroupsInfo(groups); | |
// Виведення статистики | |
ArchiveReader.showStatistics(groups); | |
System.out.println("\n====== Завершення читання ======"); | |
} catch (Exception e) { | |
System.err.println("Помилка: " + e.getMessage()); | |
e.printStackTrace(); | |
} finally { | |
scanner.close(); | |
} | |
} | |
/** | |
* Отримує ім'я файлу архіву від користувача або знаходить останній створений | |
* @param scanner сканер для введення | |
* @return ім'я файлу архіву | |
*/ | |
private static String getArchiveFileName(Scanner scanner) { | |
System.out.println("Виберіть варіант:"); | |
System.out.println("1. Використати останній створений архів"); | |
System.out.println("2. Вказати шлях до архіву вручну"); | |
System.out.print("Ваш вибір (1 або 2): "); | |
String choice = scanner.nextLine().trim(); | |
if ("1".equals(choice)) { | |
return findLatestArchive(); | |
} else if ("2".equals(choice)) { | |
System.out.print("Введіть шлях до архіву: "); | |
return scanner.nextLine().trim(); | |
} else { | |
System.out.println("Неправильний вибір, використовуємо пошук останнього архіву..."); | |
return findLatestArchive(); | |
} | |
} | |
/** | |
* Знаходить останній створений архів у папці results | |
* @return шлях до архіву або null, якщо не знайдено | |
*/ | |
private static String findLatestArchive() { | |
File resultsDir = new File("results"); | |
if (!resultsDir.exists() || !resultsDir.isDirectory()) { | |
return null; | |
} | |
File[] subDirs = resultsDir.listFiles(File::isDirectory); | |
if (subDirs == null || subDirs.length == 0) { | |
return null; | |
} | |
// Сортуємо папки за назвою (яка містить timestamp) | |
java.util.Arrays.sort(subDirs, (a, b) -> b.getName().compareTo(a.getName())); | |
// Шукаємо архів у найновішій папці | |
for (File dir : subDirs) { | |
File archiveFile = new File(dir, "academic_groups.zip"); | |
if (archiveFile.exists()) { | |
String archivePath = archiveFile.getPath(); | |
System.out.println("Знайдено архів: " + archivePath); | |
return archivePath; | |
} | |
} | |
return null; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment