Così sto facendo lettore/scrittore di file che può accedere a un determinato file e salvarlo/leggerlo. Ho un problema durante la lettura dal file. I contenuti sono numeri interi, stringa e doppia separati da "|" Delimitatori. Sto usando StringTokenizer per separare i token e salvarli in ogni singola variabile, ma quando sto leggendo gli interi ottengo un NumberFormatException anche se la stringa contiene solo un int.NumberFormatException durante l'analisi di un int
Ecco il codice:
FileReader fr = new FileReader(filename);
BufferedReader buff = new BufferedReader(fr);
String line;
while ((line = buff.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line, "|");
while (st.hasMoreElements()) {
int Id = Integer.parseInt(st.nextToken());
String Name = st.nextToken();
double cordX = Double.parseDouble(st.nextToken());
double cordY = Double.parseDouble(st.nextToken());
}
}
una riga di esempio del file:
8502113|Aarau|47.391355|8.051251
E l'errore:
java.lang.NumberFormatException: For input string: "8502113"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at storage.FileUtilities.readCitiesFromFile(FileUtilities.java:63)
at basics.Test.main(Test.java:16)
mi manca qualcosa qui? StringTokenizer sta manomettendo la stringa in un modo che non conosco?
EDIT: Ecco il codice che crea il file:
FileWriter fw = new FileWriter(filename, !overwrite); // For FileWriter true = append, false = overwrite, so we flip the value.
BufferedWriter buff = new BufferedWriter(fw);
String coordConvertor;
for (int i = 0; i <= cities.size() - 1; i++) {
buff.write(Integer.toString(cities.get(i).getId()));
buff.write("|");
buff.write(cities.get(i).getName());
buff.write("|");
coordConvertor = Double.toString(cities.get(i).getCoord().getX());
buff.write(coordConvertor);
buff.write("|");
coordConvertor = Double.toString(cities.get(i).getCoord().getY());
buff.write(coordConvertor);
buff.newLine();
Non riesco a riprodurre il problema. Forse il tuo file contiene alcuni caratteri invisibili (come il BOM solitamente posizionato all'inizio del file). Leggi quella parte come stringa e invece di analizzarla stampa 'length()' per vedere se il numero di caratteri corrisponde a quello che vedi. – Pshemo
"8502113" contengono il carattere Unicode 'U + FEFF' –
@Pshemo In effetti si è corretto. La lunghezza sembra essere +1. Come posso risolvere questo? C'è un modo per tagliare il carattere in più all'inizio del file? EDIT: il file è un file .txt standard – Akaitenshi