PrintWriter为txt写了一些奇怪的东西

时间:2016-05-28 11:20:43

标签: java printwriter chars

我希望这个程序在.txt文件中写入UTF-8字母,但结果我有数字和其他非感觉字符。有人能帮我解决吗?我不知道如何在print writer中创建它。我会感激任何帮助。这是我的代码。

//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 i 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 do 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);
            for (int i = 0; i < produkty.size(); i++) {
                pw.println(licznik + ". " + produkty.get(i));
                licznik++;
            }
            pw.close();

        } catch (IOException ex) {
            System.out.println("Błąd: ");
            ex.printStackTrace();
        }

    }
}

1 个答案:

答案 0 :(得分:2)

这是因为 RewriteEngine On RewriteRule ^\/?test$ view/index.php [NC,L] RewriteRule ^(.*)$ http://google.com [NC,L] 使用FileWriter引用的default encoding

  

此类的构造函数假定为默认字符   编码和默认的字节缓冲区大小是可以接受的。

您需要明确定义javadoc,例如:

encoding

代码中的第二个问题与打印Writer writer = new OutputStreamWriter(new FileOutputStream(plik, true), "UTF-8"); 的事实有关,licznik + ". " + produkty.get(i)执行String整数的连接,&#34;。 &#34;和Produkt类型的对象,你显然没有覆盖方法toString(),这意味着它调用Object中定义的默认实现,它只返回类的名称,后跟@以十六进制表示对象的哈希码。换句话说,要解决您的问题,只需在toString

中实施您自己的Produkt方法即可