I have an easy \'homework\' to do, but I have found a little problem with the closure of the input stream. To put it simply, I have to make a contact \'list\' application in Jav
You could still use try-with-resources
if you wrap System.in
with a CloseShieldInputStream
.
I would also recommend using a Scanner
instead of the InputStreamReader
and BufferedReader
, because of it's simplicity:
import java.util.Scanner;
import org.apache.commons.io.input.CloseShieldInputStream;
public class Contact {
protected String name;
protected String surname;
protected String email;
public void modify() throws IOException {
System.out.println("Previously name: " + name);
System.out.println("Insert new name");
try (Scanner sc = new Scanner(new CloseShieldInputStream(System.in))) {
name = sc.nextLine();
System.out.println("You've changed the name to: " + name);
System.out.println("Previously surname: " + surname);
System.out.println("Insert new surname");
surname = sc.nextLine();
System.out.println("You've changed the surname to: " + surname);
System.out.println("Previously e-mail: " + email);
System.out.println("Insert new e-mail");
email = sc.nextLine();
System.out.println("You've changed the e-mail to: " + email);
}
}
}
public class Private extends Contact {
private String cell;
private String skype;
@Override
public void modify() throws IOException {
super.modify();
System.out.println("Numero di cellulare precedente: " + cell);
System.out.println("Inserire nuovo numero");
try (Scanner sc = new Scanner(new CloseShieldInputStream(System.in))) {
cell = sc.nextLine();
System.out.println("Hai cambiato il numero in: " + cell);
System.out.println("Contatto skype precedente: " + skype);
System.out.println("Inserire nuovo contatto");
skype = sc.nextLine();
System.out.println("Hai cambiato il contatto in: " + skype);
}
}
}
See also: Closing BufferedReader and System.in