Lanike71 Δημοσ. 29 Ιανουαρίου 2020 Δημοσ. 29 Ιανουαρίου 2020 Καλησπέρα, Όποιος μπορεί ας βοηθήσει γιατί είμαι για χάπια. Τόσο μικρό πρόβλημα και με ταλαιπωρεί: Έχω μία μέθοδο, τη readSettings. Η μέθοδος αυτή διαβάζει κάποιες γραμμές από κάποιο αρχείο ως string και τις αποθηκεύει σε arraylist. Αυτά που διαβάζει είναι ένας χαρακτήρας ανά γραμμή, μπορεί να είναι αριθμός, μπορεί και String. Η μετατροπή σε int γίνεται μετά. Ως εδώ όλα καλά. Το πρόβλημα: το file που περιέχει τις γραμμές για διάβασμα, είναι πιθανό να υπάρχει ήδη αλλά και όχι. Αν δεν υπάρχει, δημιουργώ ένα αρχείο από το μηδέν και προσθέτω μέσα τις τιμές που θέλω, έστω 1,2,3,4,5,6, ανά γραμμή πάντα. Αν υπάρχει όμως το αρχείο ήδη, ελέγχω ότι υπάρχει και προσθέτω ότι λείπει. Πχ αν το αρχείο έχει 1,2,3,4 τότε προσθέτω το 5,6. Το πρόβλημα είναι ότι αργότερα που θα χρειαστεί να διαβάσω το αρχείο, στην πρώτη περίπτωση η readSettings διαβάζει κανονικά, ενώ στη δεύτερη πετάει NumberFormatException. Έχω δοκιμάσει τα πάντα, γράψιμο με FileWriter, PrintWriter, BufferWriter, trim στα strings, flush στον writer...Δε βλέπω φως. Ιδέες;
filip123go Δημοσ. 29 Ιανουαρίου 2020 Δημοσ. 29 Ιανουαρίου 2020 Φίλε μου αν δεν δούμε κώδικα δύσκολα να σε βοηθήσουμε. Τουλάχιστον ανέβασε το stack Trace
dim_mnia Δημοσ. 29 Ιανουαρίου 2020 Δημοσ. 29 Ιανουαρίου 2020 ξέχασες να μας δείξεις τον κωδικα, προφανώς έτσι δε μπορούμε να πούμε κάτι. ..
Lanike71 Δημοσ. 29 Ιανουαρίου 2020 Μέλος Δημοσ. 29 Ιανουαρίου 2020 Έλα φαγωθήκατε με τον κώδικα νυχτιάτικα...😁 public ArrayList<String> readPrinterSettings() { ArrayList<String> settings = new ArrayList<String>(); try ( BufferedReader br = new BufferedReader(new FileReader("printerSettings.txt"))) { String line; while ((line = br.readLine()) != null) { settings.add(line); } } catch (FileNotFoundException e1) { } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return settings; } Ερώτηση: Αν το txt πειραχτεί με το χέρι, αυτό τι διαφορές φέρνει στο αρχείο; Γιατί το πειράζω χειροκίνητα με notepad και μετά αρνείται το διάβασμα. Όταν το αρχείο δημιουργείται μέσω κώδικα, δεν έχει πρόβλημα.
dim_mnia Δημοσ. 29 Ιανουαρίου 2020 Δημοσ. 29 Ιανουαρίου 2020 δεν πιστεύω πως υπάρχει θέμα εδώ, σου πετάει exception η συνάρτηση αυτή; σίγουρα; Δεν παίζει ρόλο αν το πειράξεις με κώδικα ή με το χερι. Νομίζω πως το θέμα είναι αλλού, συγκεκριμένα στη μετατροπή σε int. Κάνε ένα debug και τσεκαρε τις τιμές του arraylist πριν τις μετατρέψεις μια μια σε int
htaccess Δημοσ. 29 Ιανουαρίου 2020 Δημοσ. 29 Ιανουαρίου 2020 (επεξεργασμένο) 5 ώρες πριν, Lanike71 είπε Ερώτηση: Αν το txt πειραχτεί με το χέρι, αυτό τι διαφορές φέρνει στο αρχείο; Γιατί το πειράζω χειροκίνητα με notepad και μετά αρνείται το διάβασμα. Όταν το αρχείο δημιουργείται μέσω κώδικα, δεν έχει πρόβλημα. Μήπως το edit με το notepad σου δημιουργεί BOM (Byte order mark) στο txt ? Κάνε μία δοκιμή να κάνεις edit το txt με το notepad++ . Επεξ/σία 29 Ιανουαρίου 2020 από htaccess
Lanike71 Δημοσ. 29 Ιανουαρίου 2020 Μέλος Δημοσ. 29 Ιανουαρίου 2020 (επεξεργασμένο) 6 ώρες πριν, dim_mnia είπε δεν πιστεύω πως υπάρχει θέμα εδώ, σου πετάει exception η συνάρτηση αυτή; σίγουρα; Δεν παίζει ρόλο αν το πειράξεις με κώδικα ή με το χερι. Νομίζω πως το θέμα είναι αλλού, συγκεκριμένα στη μετατροπή σε int. Κάνε ένα debug και τσεκαρε τις τιμές του arraylist πριν τις μετατρέψεις μια μια σε int Δοκίμασα με Integer.parseInt(settings.get(0)); και Integer.parseInt(settings.get(0).trim()); // To πρώτο string του arraylist 1 ώρα πριν, htaccess είπε Μήπως το edit με το notepad σου δημιουργεί BOM (Byte order mark) στο txt ? Κάνε μία δοκιμή να κάνεις edit το txt με το notepad++ . Και όμως έτσι είναι...Ευχαριστώ, κάτι που δε συνάντησα ως τώρα. Και λίγες πληροφορίες παραπάνω για να μαθαίνουμε: https://stackoverflow.com/questions/1835430/byte-order-mark-screws-up-file-reading-in-java Επεξ/σία 29 Ιανουαρίου 2020 από Lanike71
dim_mnia Δημοσ. 29 Ιανουαρίου 2020 Δημοσ. 29 Ιανουαρίου 2020 2 ώρες πριν, Lanike71 είπε Δοκίμασα με Integer.parseInt(settings.get(0)); και Integer.parseInt(settings.get(0).trim()); // To πρώτο string του arraylist Και όμως έτσι είναι...Ευχαριστώ, κάτι που δε συνάντησα ως τώρα. Και λίγες πληροφορίες παραπάνω για να μαθαίνουμε: https://stackoverflow.com/questions/1835430/byte-order-mark-screws-up-file-reading-in-java α, είμαι τόσο συνηθισμένος με notepad++ που νόμιζα πως δούλευες με αυτό, δε περίμενα να χρησιμοποιούσες το σκετο notepad των windows. Μπορείς αν θες να κάνεις το πρόγραμμα universal, με τη έννοια να υποστηρίζεις UTF-8 και UTF-8 BOM. Συγκεκριμένα το BOM είναι 3 συγκεκριμένα bytes, αν στην αρχή του αρχείου εντοπίσεις αυτά τα bytes, τότε ξέρεις πως είναι "UTF-8 with BOM" και απλώς αγνόησε τα, αν όχι, τότε μπορεί να γίνει κανονικά η μετατροπή σε int (αλλιώς θα υπάρχει πρόβλημα λόγω BOM, για αυτό σου πέταγε NumberFormatException στη πρώτο πρώτο διάβασμα).
Lanike71 Δημοσ. 29 Ιανουαρίου 2020 Μέλος Δημοσ. 29 Ιανουαρίου 2020 Συνήθως με notepad++ δουλεύω, αλλά ποτέ δεν ήξερα ότι μπορεί να δημιουργήσει τέτοιο θέμα το notepad.
htaccess Δημοσ. 29 Ιανουαρίου 2020 Δημοσ. 29 Ιανουαρίου 2020 Το notepad γενικά το αποφεύγουμε για επεξεργασία, δημιουργεί πρόβλημα από βάσεις δεδομένων μέχρι και σε απλά αρχεία με υπότιτλους ταινιών. 1
Lanike71 Δημοσ. 1 Φεβρουαρίου 2020 Μέλος Δημοσ. 1 Φεβρουαρίου 2020 (επεξεργασμένο) Για να μην ανοίγω άλλο θέμα παιδιά: Γράφω με PrintWriter χαρακτήρες σε αρχείο, με Utf-8. Ενώ στο δικό μου φαίνονται και εκτυπώνονται σωστά, σε υπολογιστές άλλων (όχι όλων), φαίνονται αλλιώς. Πχ ο χαρακτήρας ● που είναι ο U+25CF, αποθηκεύεται σωστά στο δικό μου υπολογιστή, σε άλλους όμως φαίνεται εντελώς διαφορετικό, "β--". Καμία ιδέα; Ακόμα και αν χρειάζεται διόρθωση ο τρόπος γραψίματος αρχείου στη java. Επεξ/σία 1 Φεβρουαρίου 2020 από Lanike71
tsofras Δημοσ. 1 Φεβρουαρίου 2020 Δημοσ. 1 Φεβρουαρίου 2020 1) κώδικα για να δούμε ότι όντως ορίζεις το encoding 2) Αν το παραπάνω είναι σωστό είσαι σίγουρος ότι ο άλλος που ανοίγει το αρχείο έχει ορίσει utf8 ?
Lanike71 Δημοσ. 1 Φεβρουαρίου 2020 Μέλος Δημοσ. 1 Φεβρουαρίου 2020 7 λεπτά πριν, tsofras είπε 1) κώδικα για να δούμε ότι όντως ορίζεις το encoding 2) Αν το παραπάνω είναι σωστό είσαι σίγουρος ότι ο άλλος που ανοίγει το αρχείο έχει ορίσει utf8 ? writer = new PrintWriter("printerSettings.txt", "UTF-8"); Τι εννοείς "να ορίσει utf8" ; Χρησιμοποιούμε το ίδιο πρόγραμμα, που διαβάζει, επιλέγει και σώζει χαρακτήρες για εκτύπωση. Ενώ το ίδιο πρόγραμμα σε αυτόν διαβάζει και εμφανίζει σωστά τους χαρακτήρες, όταν σώζει, σώζονται με άλλη μορφή όπως προείπα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα