Last active
May 22, 2025 07:08
-
-
Save untainsYD/c6a6d4225e5303db75cfe2159aee9f10 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.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