我希望这个程序在.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();
}
}
}
答案 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
方法即可