/
xtasy
/
files.task2
Обзор
Документация
Войти
/
xtasy
/
files.task2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
src/Utils.java
59 строк
4 KB
xtasy
fix deleting files
21 май 2026, 01:06
21 май 2026, 01:06
32735e2
Код
Авторство
О чём код?
import java.io.*; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /* Реализуйте метод saveGame(), принимающий в качестве аргументов полный путь к файлу типа String (например, "/Users/admin/Games/GunRunner/savegames/save3.dat") и объект класса GameProgress. Для записи Вам потребуются такие классы как FileOutputStream и ObjectOutputStream. У последнего есть метод writeObject(), подходящий для записи сериализованного объекта. Во избежание утечек памяти, не забудьте либо использовать try с ресурсами, либо вручную закрыть файловые стримы (это касается всех случаев работы с файловыми потоками). Таким образом, вызов метода saveGame() должен приводить к созданию файлов сохранений в папке savegames. Далее реализуйте метод zipFiles(), принимающий в качестве аргументов String полный путь к файлу архива (например, "/Users/admin/Games/GunRunner/savegames/zip.zip") и список запаковываемых объектов в виде списка строчек String полного пути к файлу (например, "/Users/admin/Games/GunRunner/savegames/save3.dat"). В методе Вам потребуется реализовать блок try-catch с объектами ZipOutputStream и FileOutputStream. Внутри него пробегитесь по списку файлов и для каждого организуйте запись в блоке try-catch через FileInputStream. Для этого создайте экземпляр ZipEntry и уведомьте ZipOutputStream о новом элементе архива с помощью метода putNextEntry(). Далее необходимо считать упаковываемый файл с помощью метода read() и записать его с помощью метода write(). После чего уведомьте ZipOutputStream о записи файла в архив с помощью метода closeEntry(). Далее, используя методы класса File, удалите файлы сохранений, не лежащие в архиве. */ public class Utils { public static void saveGame(String savePath, GameProgress gameProgress) { try (FileOutputStream fos = new FileOutputStream(savePath); ObjectOutputStream oos = new ObjectOutputStream(fos)) { oos.writeObject(gameProgress); } catch (IOException e) { System.out.println("Error saving game: " + e.getMessage()); } } public static void zipFiles(String loadPath, List<String> listPaths) { try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(loadPath))) { for (String path : listPaths) { File file = new File(path); try (FileInputStream fis = new FileInputStream(path)) { ZipEntry entry = new ZipEntry(file.getName()); zos.putNextEntry(entry); zos.write(fis.readAllBytes()); zos.closeEntry(); } catch (IOException e) { System.out.println("Error zipping files: " + e.getMessage()); } if (!file.delete()) { System.out.println("Error deleting file: " + path); } } } catch (IOException e) { System.out.println("Error zipping files: " + e.getMessage()); } } }