Niveau { public static Niveau chargerNiveau(InputStream fichier) { ArrayList<Corps> corps = new ArrayList<>(); String descriptionNiveau = null; Objectif objectif = null; Vecteur pointDepart = null; String titreNiveau = null; double vitesseDepart = 0; Niveau niveau = null; if (fichier != null) { try { InputStreamReader isr = new InputStreamReader(fichier); BufferedReader bw = new BufferedReader(isr); String ligne; StringTokenizer st; while ((ligne = bw.readLine()) != null) { st = new StringTokenizer(ligne, ";"); if (st.hasMoreTokens()) { switch (st.nextToken().trim().toLowerCase()) { case "planete": { double masse = Double.parseDouble(st.nextToken().trim()); double positionX = Double.parseDouble(st.nextToken().trim()); double positionY = Double.parseDouble(st.nextToken().trim()); double rayon = Double.parseDouble(st.nextToken().trim()); String texture = st.nextToken().trim(); double rayonAtmosphere = Double.parseDouble(st.nextToken().trim()); String couleurAtmosphere = st.nextToken().trim(); Planete p = new Planete(masse, positionX, positionY, rayon, rayonAtmosphere, Color.web(couleurAtmosphere)); p.asgTexture(Planete.Texture.reqTexture(texture)); corps.add(p); break; } case "vaisseau": { double masse = Double.parseDouble(st.nextToken().trim()); double positionX = Double.parseDouble(st.nextToken().trim()); double positionY = Double.parseDouble(st.nextToken().trim()); double vitesseX = Double.parseDouble(st.nextToken().trim()); double vitesseY = Double.parseDouble(st.nextToken().trim()); Vecteur position = new Vecteur(positionX, positionY); Vecteur vitesse = new Vecteur(vitesseX, vitesseY); corps.add(new Vaisseau(masse, position, vitesse)); break; } case "vaisseaujoueur": { double puissance = Double.parseDouble(st.nextToken().trim()); double masse = Double.parseDouble(st.nextToken().trim()); double capaciteCarburant = Double.parseDouble(st.nextToken().trim()); double carburantDepart = Double.parseDouble(st.nextToken().trim()); corps.add(new VaisseauJoueur(puissance, masse, capaciteCarburant, carburantDepart)); break; } case "descriptionniveau": { descriptionNiveau = st.nextToken().trim(); break; } case "objectifrayon": { double posRayonX = Double.parseDouble(st.nextToken().trim()); double posRayonY = Double.parseDouble(st.nextToken().trim()); double rayon = Double.parseDouble(st.nextToken().trim()); Vecteur posRayon = new Vecteur(posRayonX, posRayonY); objectif = new ObjectifRayon(posRayon, rayon); break; } case "pointdepart": { double pointDepartX = Double.parseDouble(st.nextToken().trim()); double pointDepartY = Double.parseDouble(st.nextToken().trim()); pointDepart = new Vecteur(pointDepartX, pointDepartY); break; } case "titreniveau": { titreNiveau = st.nextToken().trim(); break; } case "vitessedepart": { vitesseDepart = Double.parseDouble(st.nextToken().trim()); break; } } } } bw.close(); isr.close(); niveau = new Niveau(corps, descriptionNiveau, objectif, pointDepart, titreNiveau, vitesseDepart); } catch (Exception e) { } } return niveau; } Niveau();  Niveau(List<Corps> nouveauxCorps,
                String nouvelleDescriptionNiveau,
                Objectif nouvelObjectif,
                Vecteur nouveauPointDepart,
                String nouveauTitreNiveau,
                double nouvelleVitesseDepart); void ajouterCorps(Corps nouveauCorps); void supprimerCorps(Corps c); static Niveau chargerNiveau(InputStream fichier); List<Corps> reqCorps(); String reqDescriptionNiveau(); Objectif reqObjectif(); Vecteur reqPointDepart(); String reqTitreNiveau(); double reqVitesseDepart(); void sauvegarderNiveau(File fichier); void asgDescriptionNiveau(String nouvelleDescriptionNiveau); void asgObjectif(Objectif nouvelObjectif); void asgPointDepart(Vecteur nouveauPointDepart); void asgTitreNiveau(String nouveauTitreNiveau); void asgVitesseDepart(double nouvelleVitesseDepart);  }
@Test public void testChargerNiveau() { File f = new File("/IOTest.txt"); niveau.sauvegarderNiveau(f); niveau.ajouterCorps(new Planete(10, 10, 10, 10, 0, Color.WHITE)); niveau.sauvegarderNiveau(f); }