M2

Entrées / sorties

Lire une chaîne de caractères

Scanner sc = new Scanner(System.in);
String nom = sc.next();

Par défaut, next() produit une chaîne de caractères, mais il existe également nextInt(), nextDouble(), etc.

Note : Il faut utiliser nextLine() après avoir utilisé next() si on veut utiliser le scanner pour lire d'autres données par la suite.

Copier un fichier dans un autre

public void copie(File fichier1, File fichier2) throws IOException {
  FileInputStream input   = null;
  FileOutputStream output = null;

  try {
    input  = new FileInputStream(fichier1);
    output = new FileOutputStream(fichier2);

    byte[] buf = new byte[1024];
    int taille;

    while ((taille = input.read(buf)) > 0) {
      output.write(buf, 0, taille);
    }
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    input.close();
    output.close();
  }
}

Sérialisation d'objets

Permet d'obtenir une représentation au format texte d'un objet stocké en mémoire.

Exemple :

class Personne implements Serializable {
  private static final long serialVersionUID = 42L;

  private String nom;
  private String prenom;

  private Date naissance;
  transient private int age;

  // ...
}

Ensuite, pour enregistrer l'objet dans un fichier, il faut une instance de ObjectOutputStream (basé sur un FileOutputStream) et utiliser sa méthode writeObject :

Personne mouloud = new Personne(
  "Mouloud",
  "Dupont",
  new Date(12, 12, 1996)
);

ObjectOutputStream output = new ObjectOutputStream(
  new FileOutputStream(new File("mouloud.txt"))
);

output.writeObject(mouloud);
output.close();

Clonage d'objets

Par défaut, il suffit simplement d'implémenter l'interface Cloneable sur les objets qui doivent pouvoir être clonés.

class Ordinateur implements Cloneable {

}

Si la classe possède des attributs ayant un type non natif, il faut implémenter l'interface sur ces éléments et redéfinir la méthode clone de la classe :

class Personne implements Cloneable {

}

// ...

class Ordinateur implements Cloneable {
  public Personne proprio;

  @Override
  protected Object clone() throws CloneNotSupportedException {
    Ordinateur ordi = (Ordinateur)super.clone();
    ordi.proprio    = (Personne)proprio.clone();

    return ordi;
  }
}