diff --git a/09-java-generics-collections/task02/src/com/example/task02/SavedList.java b/09-java-generics-collections/task02/src/com/example/task02/SavedList.java index a4e2fb571..16541abc7 100644 --- a/09-java-generics-collections/task02/src/com/example/task02/SavedList.java +++ b/09-java-generics-collections/task02/src/com/example/task02/SavedList.java @@ -2,34 +2,86 @@ import java.io.File; import java.io.Serializable; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.AbstractList; +import java.util.ArrayList; +import java.util.Objects; -public class SavedList extends AbstractList { +public class SavedList extends AbstractList +{ + private final ArrayList list; + private final Path path; - public SavedList(File file) { + public SavedList(File file) + { + Objects.requireNonNull(file); + ArrayList tmp; + try (ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file))) + { + tmp = (ArrayList) objectInputStream.readObject(); + if (tmp == null) { + tmp = new ArrayList<>(); + } + } catch (Exception exception) + { + System.err.println(exception.toString() + ". Creating new empty list..."); + tmp = new ArrayList<>(); + } + this.list = tmp; + this.path = file.toPath(); + + } + + private void sync() + { + try (ObjectOutputStream outputStream = new ObjectOutputStream(Files.newOutputStream(this.path))) + { + outputStream.writeObject(this.list); + } catch (IOException e) + { + e.printStackTrace(); + } } @Override - public E get(int index) { + public E get(int index) + { return null; + return this.list.get(index); } @Override - public E set(int index, E element) { + public E set(int index, E element) + { return null; + E elem = this.list.set(index, element); + this.sync(); + return elem; } @Override - public int size() { + public int size() + { return 0; + return this.list.size(); } @Override - public void add(int index, E element) { + public void add(int index, E element) + { + this.list.add(index, element); + this.sync(); } @Override - public E remove(int index) { - return null; + public E remove(int index) + { + E elem = this.list.remove(index); + this.sync(); + return elem; } } + +