Skip to content

Instantly share code, notes, and snippets.

@untainsYD
Last active May 22, 2025 07:08
Show Gist options
  • Save untainsYD/c6a6d4225e5303db75cfe2159aee9f10 to your computer and use it in GitHub Desktop.
Save untainsYD/c6a6d4225e5303db75cfe2159aee9f10 to your computer and use it in GitHub Desktop.
Laboratory 5, Task 3
package lab5.archive;
import java.io.*;
import java.util.zip.*;
/**
* Клас для запису даних про академічні групи у ZIP-архів.
*/
public class ArchiveWriter {
/**
* Записує академічні групи у ZIP-архів
* @param groups масив академічних груп
* @param archiveFileName ім'я архівного файлу
* @throws IOException у разі помилки запису
*/
public static void writeGroupsToArchive(AcademicGroup[] groups, String archiveFileName) throws IOException {
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(archiveFileName))) {
// Записуємо інформацію про кожну групу в окремий запис архіву
for (int i = 0; i < groups.length; i++) {
AcademicGroup group = groups[i];
String entryName = String.format("group_%d_%s.dat", i + 1, group.getGroupName());
// Створюємо запис в архіві
ZipEntry zipEntry = new ZipEntry(entryName);
zos.putNextEntry(zipEntry);
// Серіалізуємо групу (не використовуємо try-with-resources!)
ObjectOutputStream oos = new ObjectOutputStream(zos);
oos.writeObject(group);
oos.flush(); // Примусово записуємо дані
// Не закриваємо oos, щоб не закрити zos
zos.closeEntry();
System.out.println("Записано групу '" + group.getGroupName() + "' у запис: " + entryName);
}
// Додаємо файл з загальною інформацією про архів
ZipEntry infoEntry = new ZipEntry("archive_info.txt");
zos.putNextEntry(infoEntry);
PrintWriter pw = new PrintWriter(new OutputStreamWriter(zos, "UTF-8"));
pw.println("=== Інформація про архів академічних груп ===");
pw.println("Дата створення: " + java.time.LocalDateTime.now());
pw.println("Кількість груп: " + groups.length);
pw.println();
for (int i = 0; i < groups.length; i++) {
AcademicGroup group = groups[i];
pw.println(String.format("Група %d:", i + 1));
pw.println(" Назва: " + group.getGroupName());
pw.println(" Спеціальність: " + group.getSpecialty());
pw.println(" Рік: " + group.getYear());
pw.println(" Кількість студентів: " + group.getStudentCount());
pw.println(" Середній бал: " + String.format("%.2f", group.getGroupAverageGrade()));
pw.println();
}
pw.flush(); // Примусово записуємо дані
// Не закриваємо pw, щоб не закрити zos
zos.closeEntry();
System.out.println("Додано інформаційний файл: archive_info.txt");
}
System.out.println("Архів створено успішно: " + archiveFileName);
}
/**
* Створює тестові дані для демонстрації
* @return масив академічних груп з тестовими даними
*/
public static AcademicGroup[] createTestData() {
// Створення студентів для першої групи
Student[] group1Students = {
new Student("Олександр", "Петренко", 1001, 2, 85.5),
new Student("Марія", "Іваненко", 1002, 2, 92.0),
new Student("Андрій", "Коваленко", 1003, 2, 78.3),
new Student("Анна", "Шевченко", 1004, 2, 89.7)
};
// Створення студентів для другої групи
Student[] group2Students = {
new Student("Дмитро", "Мельник", 2001, 3, 91.2),
new Student("Олена", "Бондаренко", 2002, 3, 87.8),
new Student("Максим", "Козлов", 2003, 3, 83.4),
new Student("Вікторія", "Полякова", 2004, 3, 95.1),
new Student("Роман", "Тимошенко", 2005, 3, 79.6)
};
// Створення академічних груп
AcademicGroup group1 = new AcademicGroup("КН-21", "Комп'ютерні науки", 2021, group1Students);
AcademicGroup group2 = new AcademicGroup("ПІ-31", "Програмна інженерія", 2020, group2Students);
return new AcademicGroup[]{group1, group2};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment