java - PrintWriter writes something strange to txt -
i wanted program write utf-8 letters in .txt file result have numbers , other non-sense chars. me solve it? have no idea how make in print writer. i'll appreciate help. here's code.
//all imports public class main extends application { stage okno; tableview<produkt> tabela; textfield nazwawejscie, iloscwejscie; public static void main(string[] args) { launch(args); } @override public void start(stage primarystage) throws exception { okno = primarystage; okno.settitle("stwórz listę zakupów"); // kolumna nazwa tablecolumn<produkt, string> kolumnanazwa = new tablecolumn<>("nazwa"); kolumnanazwa.setminwidth(200); kolumnanazwa.setcellvaluefactory(new propertyvaluefactory<>("nazwa")); // kolumna ilosc tablecolumn<produkt, double> kolumnailosc = new tablecolumn<>("ilość"); kolumnailosc.setminwidth(100); kolumnailosc.setcellvaluefactory(new propertyvaluefactory<>("ilosc")); // wprowadź nazwę nazwawejscie = new textfield(); nazwawejscie.setprompttext("nazwa (string)"); nazwawejscie.setminwidth(100); // wprowadź ilość iloscwejscie = new textfield(); iloscwejscie.setprompttext("ilość (double)"); // przyciski button dodaj = new button("dodaj"); dodaj.setonaction(e -> kliknijdodaj()); button usun = new button("usuń"); usun.setonaction(e -> kliknijusun()); button stworzliste = new button("zapisz listę"); stworzliste.setonaction(e -> zapiszliste()); hbox pojemnik = new hbox(); pojemnik.setpadding(new insets(10, 10, 10, 10)); pojemnik.setspacing(10); // wstaw pola przyciski w jeden rząd pojemnik.getchildren().addall(nazwawejscie, iloscwejscie, dodaj, usun, stworzliste); tabela = new tableview<>(); tabela.setitems(getprodukt()); tabela.getcolumns().addall(kolumnanazwa, kolumnailosc); vbox vbox = new vbox(); vbox.getchildren().addall(tabela, pojemnik); scene scena = new scene(vbox); okno.setscene(scena); okno.show(); } // funkcja dodania produktu public void kliknijdodaj() { produkt produkt = new produkt(); produkt.setnazwa(nazwawejscie.gettext()); produkt.setilosc(double.parsedouble(iloscwejscie.gettext())); tabela.getitems().add(produkt); nazwawejscie.clear(); iloscwejscie.clear(); } // funkcja usunięcia produktu public void kliknijusun() { observablelist<produkt> produktwybrany, wszystkieprodukty; wszystkieprodukty = tabela.getitems(); produktwybrany = tabela.getselectionmodel().getselecteditems(); produktwybrany.foreach(wszystkieprodukty::remove); } public observablelist<produkt> getprodukt() { observablelist<produkt> produkty = fxcollections.observablearraylist(); return produkty; } // funkcja dodania listy pliku public void zapiszliste() { arraylist<produkt> produkty = new arraylist<produkt>(tabela.getitems()); int licznik = 1; try { file plik = new file("c:\\users\\sebastian\\desktop\\lista.txt"); if (!plik.exists()) { plik.createnewfile(); } filewriter fw = new filewriter(plik, true); bufferedwriter bw = new bufferedwriter(fw); printwriter pw = new printwriter(bw); (int = 0; < produkty.size(); i++) { pw.println(licznik + ". " + produkty.get(i)); licznik++; } pw.close(); } catch (ioexception ex) { system.out.println("błąd: "); ex.printstacktrace(); } } }
this because filewriter
uses default encoding
mentioned in javadoc
quote:
the constructors of class assume default character encoding , default byte-buffer size acceptable.
you need define explicitly encoding
next example:
writer writer = new outputstreamwriter(new fileoutputstream(plik, true), "utf-8");
the second problem in code related fact print licznik + ". " + produkty.get(i)
string
concatenation of integer, ". " , object of type produkt
did not override method tostring()
means calls default implementation defined in object
returns name of class followed @ , hash code of object in hexadecimal. in other words, fix problem implement own tostring
method in produkt
Comments
Post a Comment