/
AnatoliyMatveev
/
DZ-Save
Обзор
Документация
Войти
/
AnatoliyMatveev
/
DZ-Save
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Main.java
106 строк
5 KB
AnatoliyMatveev
Create: GameProgress.java, Main.java
16 июл 2026, 08:52
Верифицирован
16 июл 2026, 08:52
537092a
Код
Авторство
О чём код?
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class Main { public static void main(String[] args) { //Создаем три экземпляра класса GameProgress GameProgress progress1 = new GameProgress(94, 5, 2, 254.12); GameProgress progress2 = new GameProgress(68, 8, 4, 512.65); GameProgress progress3 = new GameProgress(23, 3, 7, 1043.81); //Путь к папке сохранений String saveFolder = "D://GGames"; //Формируем полные пути к файлам сохранений String path1 = saveFolder + "save1.dat"; String path2 = saveFolder + "save2.dat"; String path3 = saveFolder + "save3.dat"; //Вызываем метод saveGame() для каждого объекта saveGame(path1, progress1); saveGame(path2, progress2); saveGame(path3, progress3); //Формируем список полных путей к файлам для архивации List<String> filesToZip = new ArrayList<>(); filesToZip.add(path1); filesToZip.add(path2); filesToZip.add(path3); //Вызываем метод zipFiles для создания архива String zipPath = saveFolder + "zip.zip"; zipFiles(zipPath, filesToZip); //Используя методы класса File, удаляем файлы вне архива deleteFiles(filesToZip); } //Метод сериализации объекта GameProgress по полному пути public static void saveGame(String filePath, GameProgress gameProgress) { try (FileOutputStream fos = new FileOutputStream(filePath); ObjectOutputStream oos = new ObjectOutputStream(fos)) { oos.writeObject(gameProgress); System.out.println("Объект успешно сериализован в файл: " + filePath); } catch (Exception e) { System.out.println("Ошибка при сохранении игры: " + e.getMessage()); } } //Метод архивации списка файлов в zip-архив public static void zipFiles(String zipPath, List<String> filesToZip) { try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipPath))) { for (String filePath : filesToZip) { File fileToZip = new File(filePath); //Внутренний блок try-catch с ресурсами для чтения каждого отдельного файла try (FileInputStream fis = new FileInputStream(fileToZip)) { // Создаем запись в архиве, используя только имя файла ZipEntry zipEntry = new ZipEntry(fileToZip.getName()); zos.putNextEntry(zipEntry); //Буфер для побайтового чтения и записи данных byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) >= 0) { zos.write(buffer, 0, length); } //Уведомляем о завершении записи текущего файла в архив zos.closeEntry(); System.out.println("Файл " + fileToZip.getName() + " успешно добавлен в архив."); } catch (Exception e) { System.out.println("Ошибка при чтении файла " + filePath + ": " + e.getMessage()); } } System.out.println("Архив успешно создан по пути: " + zipPath); } catch (Exception e) { System.out.println("Ошибка при создании архива: " + e.getMessage()); } } //Метод для удаления файлов сохранений public static void deleteFiles(List<String> filesToDelete) { for (String filePath : filesToDelete) { File file = new File(filePath); if (file.exists()) { if (file.delete()) { System.out.println("Исходный файл успешно удален: " + file.getName()); } else { System.out.println("Не удалось удалить файл: " + file.getName()); } } } } }