1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
| public class MaClasse {
private static HashMap<String, Rectangle> hm = new HashMap<String, Rectangle>();
...
// Lit le fichier associé et remplis la table de coordonnées.
// Retourne false en cas d'échec de chargement.
// Note: en cas d'échec, les clées enregistrées sont conservées.
private static boolean chargerFichier(String filePath) {
String ligne;
int ligneCount = 1;
try {
// On ouvre le fichier en lecture
FileReader fr = new FileReader(filePath);
BufferedReader br = new BufferedReader(fr);
// Pour stockage dans HashMap
String cleComposant = "";
Rectangle rect = new Rectangle();
// Pour lecture des coordonnées
int coordLue;
int nbCoordLues = 0;
int dim[] = new int[4];
do {
// Lecture d'une ligne
ligne = br.readLine();
if(ligne != null) {
// On supprime les commentaires
ligne = trimCommentaire( ligne );
// Si la ligne n'est pas vide après épuration
if( ligne.length() > 0 ) {
if( cleComposant.equals("") ) {
// On lit d'abords un nom du composant
cleComposant = ligne.trim();
} else {
// Ensuite on lit 4 coordonnées
StringTokenizer tok = new StringTokenizer(ligne, "\t "); // Tabulation ET espace
while( nbCoordLues < 4 && tok.hasMoreTokens() ) {
coordLue = -1;
try {
// On tente une conversion en entier
coordLue = Integer.parseInt( tok.nextToken() );
// Si conversion réussie, on ajoute la coordonnée dans le tableau dim
dim[ nbCoordLues++ ] = coordLue;
}
catch(NumberFormatException ex) { }
}
if( nbCoordLues == 4 ) { // On a lu 4 coordonnée au total: il faut les enregistrer
// On place les coordonnées de dim dans le Rectangle
rect.setBounds( dim[0], dim[1], dim[2], dim[3] );
// On ajoute le Rectangle à la table
String cle = cleFenetre + "_" + cleComposant;
hm.put(cle , new Rectangle(rect));
// On repart pour lire une nouvelle clé
cleComposant = "";
nbCoordLues = 0;
} // Fin enregistrement
} // Fin lecture coordonnée
} // Fin traitement ligne
} // Fin ligne non null
ligneCount++;
} while(ligne != null); // On s'arrête en fin de fichier
}
catch(FileNotFoundException ex) {
System.out.println("Erreur: Aucun fichier de coordonnees pour " + cleFenetre);
return false;
}
catch(NumberFormatException ex) {
System.out.println("Erreur: Probleme de structure du fichier de coordonnees pour \"" + cleFenetre + "\" ligne " + ligneCount);
return false;
}
catch(IOException ex) {
System.out.println("Erreur: Probleme lors de la lecture du fichier de coordonnees pour \"" + cleFenetre + "\"");
return false;
}
// Chargement effectué avec succès !
ficCharges.add(cleFenetre);
return true;
}
// Enlève les blancs inutiles et les commentaires
private static String trimCommentaire(String ligne) {
// On épure la ligne en enlèvant les blancs inutiles
String trimed = ligne.trim();
// Cas d'une ligne vide
if(trimed.length() <= 0)
return "";
// On regarde s'il y a un commentaire sur la ligne
int pos;
if( (pos = trimed.indexOf("//")) == -1 )
// Aucun commentaire, on retourne la ligne épurée
return trimed;
else {
// Il y en a un, on l'enlève et on retourne le reste
return trimed.substring(0, pos);
}
}
} |
Partager