Skip to content

Instantly share code, notes, and snippets.

@untainsYD
Created May 22, 2025 07:03
Show Gist options
  • Save untainsYD/ddee717484db8efe3de77b6f95458112 to your computer and use it in GitHub Desktop.
Save untainsYD/ddee717484db8efe3de77b6f95458112 to your computer and use it in GitHub Desktop.
Laboratory 5, Task 3
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