Questa è la classe che utilizza il metodo e che comprende il metodo per parsare le stringhe:
codice:
public class ApriFileIrraggiamento {
public Irraggiamento apriFiles(File directory) throws FileNotFoundException, IOException, DatiMeseInvalidiException {
FileReader f = new FileReader(directory + File.separator + "Radiation.txt");
BufferedReader b = new BufferedReader(f);
Irraggiamento irraggiamento = new Irraggiamento();
CalcolaMediaIrraggiamentoAnnuale mediaAnnuale = new CalcolaMediaIrraggiamentoAnnuale();
List<RegistrazioniIrraggiamenti> registrazioni = new ArrayList<>();
try {
String latitude = parseString(b, "Lat", "Lati", true);
String longitude = parseString(b, "Long", "Longi", false);
b.readLine();// Potenza nominale del sistema FV
String inclinazione = parseString(b, "Incli", "Inclin", false);
String azimuth = parseString(b, "Orie", "Orient", false);
b.readLine(); // empty
b.readLine(); // Angolo fisso
String[] intestazione = b.readLine().split("\\s+"); // intestazione
if (intestazione.length >= 1) {
int i;
for (i = 0; i < intestazione.length; i++) {
System.out.print(intestazione[i] + "\t");
}
System.out.println();
}
Coordinate coordinate = new Coordinate(latitude.trim(), longitude.trim(), inclinazione.trim(), azimuth.trim());
irraggiamento.setCoordinate(coordinate);
String linea = b.readLine();
int i;
for (i = 0; i < 12; i++) {
if (linea != null && !linea.equals("")) {
RegistrazioniIrraggiamenti registro = new RegistrazioniIrraggiamenti(linea.trim(), intestazione, intestazione.length);
registrazioni.add(registro);
linea = b.readLine();
}
}
irraggiamento.setRegistrazioniAnno(registrazioni);
double mediaHm = mediaAnnuale.calcolaMediaIrraggiamentoAnno(irraggiamento);
irraggiamento.setIrraggiamentoAnnualeHm(mediaHm);
} finally {
try {
b.close();
} catch (IOException e) {
}
}
return irraggiamento;
}
private String parseString(final BufferedReader reader, final String name1, final String name2, final boolean skipLast) throws DatiMeseInvalidiException {
try {
final String input = reader.readLine();
if (input != null && !input.trim().isEmpty() && (input.startsWith(name1) || input.startsWith(name2))) {
int index = input.indexOf(":");
if (index < 0) {
throw new DatiMeseInvalidiException("Identificatore non presente");
}
if (skipLast) {
int indexV = input.indexOf(",");
return input.substring(index + 1, indexV);
} else {
return input.substring(index + 1);
}
}
throw new DatiMeseInvalidiException("Identificatore non presente");
} catch (IOException ex) {
Logger.getLogger(ApriFileMese.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
}
Come è visibile nella classe vado a parsare le righe del file txt per estrarne le informazioni utili. A questo punto, devo valutare il caso in cui il file è vuoto o parzialmente vuoto o comunque non riesco ad estrare le informazioni che mi servono.
Che consiglio mi daresti? Come dovrei procedere?
Grazie