Почему программа работает только тогда, когда в методе save() пишу в файл OutputStream-ом. При обертовании в PrintWriter -- ни чего не пишется?
public class Solution {
public static void main(String[] args) {
//you can find your_file_name.tmp in your TMP directory or adjust outputStream/inputStream according to your file's actual location
//вы можете найти your_file_name.tmp в папке TMP или исправьте outputStream/inputStream в соответствии с путем к вашему реальному файлу
try {
File yourFile = File.createTempFile("E:/test/file1.txt", null);
// OutputStream outputStream = new FileOutputStream(yourFile);
// InputStream inputStream = new FileInputStream(yourFile);
OutputStream outputStream = new FileOutputStream("E:/test/file1.txt");
InputStream inputStream = new FileInputStream("E:/test/file1.txt");
OutputStream outputStream2 = new FileOutputStream("E:/test/file2.txt");
JavaRush javaRush = new JavaRush();
User user1 = new User();
user1.setFirstName("Саня");
user1.setLastName("Пушкин");
user1.setMale(true);
user1.setCountry(User.Country.RUSSIA);
user1.setBirthDate(new SimpleDateFormat("dd.MM.yyyy").parse("06.06.1799"));
javaRush.users.add(user1);
User user2 = new User();
user2.setFirstName("Кася");
user2.setLastName("Камоцкая");
user2.setMale(false);
user2.setCountry(User.Country.OTHER);
user2.setBirthDate(new SimpleDateFormat("dd.MM.yyyy").parse("22.06.1964"));
javaRush.users.add(user2);
//initialize users field for the javaRush object here - инициализируйте поле users для объекта javaRush тут
javaRush.save(outputStream);
outputStream.flush();
JavaRush loadedObject = new JavaRush();
loadedObject.load(inputStream);
System.out.println(loadedObject.equals(javaRush));
loadedObject.save(outputStream2);
//here check that the javaRush object is equal to the loadedObject object - проверьте тут, что javaRush и loadedObject равны
outputStream.close();
inputStream.close();
} catch (IOException e) {
//e.printStackTrace();
System.out.println("Oops, something is wrong with my file");
} catch (Exception e) {
e.printStackTrace();
System.out.println("Oops, something is wrong with the save/load method");
}
}
public static class JavaRush {
public List<User> users = new ArrayList<>();
public void save(OutputStream outputStream) throws Exception {
PrintWriter printWriter = new PrintWriter(outputStream);
if (this.users.size() > 0) {
for (User item : this.users) {
printWriter.write(item.getFirstName());
//outputStream.write(item.getFirstName().getBytes());
//outputStream.write(10);
printWriter.println(item.getLastName());
//outputStream.write(item.getLastName().getBytes());
//outputStream.write(10);
printWriter.println(item.isMale());
// outputStream.write(String.valueOf(item.isMale()).getBytes());
// outputStream.write(10);
printWriter.println(item.getCountry());
//outputStream.write(item.getCountry().name().getBytes());
//outputStream.write(10);
printWriter.println(item.getBirthDate().getTime());
// outputStream.write(String.valueOf(item.getBirthDate().getTime()).getBytes());
// outputStream.write(10);
}
}
//implement this method - реализуйте этот метод
}
public void load(InputStream inputStream) throws Exception {
BufferedReader fileReader = new BufferedReader(new InputStreamReader(inputStream));
while (fileReader.ready()){
User user = new User();
user.setFirstName(fileReader.readLine());
user.setLastName(fileReader.readLine());
user.setMale(searchMale(fileReader.readLine()));
user.setCountry(searchCountry(fileReader.readLine()));
user.setBirthDate(new Date(Long.valueOf(fileReader.readLine())));
users.add(user);
}
fileReader.close();
//implement this method - реализуйте этот метод
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
JavaRush javaRush = (JavaRush) o;
return users != null ? users.equals(javaRush.users) : javaRush.users == null;
}
@Override
public int hashCode() {
return users != null ? users.hashCode() : 0;
}
}
public static boolean searchMale(String line){
if (line.equals("true")) {
return true;
}
return false;
}
public static User.Country searchCountry(String strCountry){
if (strCountry.equals("UKRAINE")){ return User.Country.UKRAINE;}
if (strCountry.equals("RUSSIA")){ return User.Country.RUSSIA;}
if (strCountry.equals("OTHER")){ return User.Country.OTHER;}
return null;
}
Uladzimir
32 уровень
Не могу понять.
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia VolkovaJava Developer в DXCMaster
13 марта 2021, 18:00
Потому что по умолчанию PrintWriter создается без autoFlush. Чтобы данные записывались в файл, нужно либо добавить printWriter.flush() в конце метода, либо сразу в конструкторе вторым параметром добавить true (чтобы "включить" autoFlush).
0
Uladzimir
13 марта 2021, 19:08
стало писать, но не парсится из файла long значение даты
0
Ksenia VolkovaJava Developer в DXCMaster
13 марта 2021, 19:15решение
А ты имя и фамилию по-прежнему в одну строку пишешь?
+2
Uladzimir
13 марта 2021, 19:18
ой
0