I have a problem with Date object. It throw exceptions and I don't have any idea how to correct that problem. I doubt that try-catch is proper solution. There is the stack trace result:
java.lang.IllegalArgumentException
at java.util.Date.parse(Date.java:617)
at java.util.Date.<init>(Date.java:274)
at pl.codegym.task.task20.task2002.Solution.main(Solution.java:28)
Or like this, if I don't initialize this field for User object:
java.text.ParseException: Unparseable date: "null"
at java.text.DateFormat.parse(DateFormat.java:366)
at pl.codegym.task.task20.task2002.Solution$CodeGym.load(Solution.java:84)
at pl.codegym.task.task20.task2002.Solution.main(Solution.java:32)
package pl.codegym.task.task20.task2002;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/*
Odczytywanie i zapisywanie do pliku: CodeGym
*/
public class Solution {
public static void main(String[] args) {
// Plik your_file_name.tmp znajdziesz w swoim folderze plików tymczasowych, ewentualnie dostosuj outputStream/inputStream do rzeczywistej lokalizacji pliku
try {
File yourFile = File.createTempFile("your_file_name", null);
OutputStream outputStream = new FileOutputStream(yourFile);
InputStream inputStream = new FileInputStream(yourFile);
CodeGym codeGym = new CodeGym();
codeGym.users.add(new User());
codeGym.save(outputStream);
outputStream.flush();
CodeGym loadedObject = new CodeGym();
loadedObject.load(inputStream);
codeGym.equals(loadedObject);
outputStream.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("Oops, coś jest nie tak z moim plikiem");
} catch (Exception e) {
e.printStackTrace();
System.out.println("Oops, coś jest nie tak z metodą save/load");
}
}
public static class CodeGym {
public List<User> users = new ArrayList<>();
public void save(OutputStream outputStream) throws Exception {
PrintWriter writer = new PrintWriter(outputStream);
String isListFull = users != null ? "tak" : "nie";
writer.println(isListFull);
writer.flush();
if (users != null){
for (User h : users){
writer.println(h.getFirstName());
writer.println(h.getLastName());
writer.println(h.getBirthDate());
writer.println(h.isMale());
writer.println(h.getCountry());
}
writer.flush();
}
writer.close();
}
public void load(InputStream inputStream) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String isListFull = reader.readLine();
if (isListFull.equals("tak")){
String usereName = reader.readLine();
while (usereName != null){
User user = new User();
user.setFirstName(usereName);
user.setLastName(reader.readLine());
String data = reader.readLine();
if (data.equals("null")){
user.setBirthDate(null);
}else {
SimpleDateFormat format = new SimpleDateFormat("MMMM d, yyyy");
Date date = format.parse(data);
user.setBirthDate(date);
}
boolean isMale = Boolean.parseBoolean(reader.readLine());
user.setMale(isMale);
String country = reader.readLine();
if (country.equals("null")){
user.setCountry(User.Country.OTHER);
}else {
user.setCountry(User.Country.valueOf(country));
}
this.users.add(user);
usereName = reader.readLine();
}
}
reader.close();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CodeGym codeGym = (CodeGym) o;
return Objects.equals(users, codeGym.users);
}
@Override
public int hashCode() {
return users != null ? users.hashCode() : 0;
}
}
}