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

Popular posts from this blog

ios - RestKit 0.20 — CoreData: error: Failed to call designated initializer on NSManagedObject class (again) -

java - Digest auth with Spring Security using javaconfig -

laravel - PDOException in Connector.php line 55: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) -