所以我有一个程序,它应该将文本(使用unicode)写入文件。当我通过Eclipse执行此操作时,Everythhing工作,但在exxported时则不行。这是我通过Eclipse完成它时的样子:
Всетовары:TedПоцене:100рубДерпПоцене:10рубДерпПо 视频:10рубДерпПоцене:10рубДерпПоцене:10рубДерп
显示:10位用户:10рубДерпПоцене:10рубДерп 显示:10位用户:10рубДерпПоцене:10рубПроданныетовары:TedПоцене:100рубДерпПоцене:10руб ДерпПоцене:10рубДерпПоцене:10рубДерпПоцене:
10рубДерпПоцене:10рубДерпПоцене:10рубДерпПоцене: 10рубДерпПоцене:10рубДерпПоцене:10рубДерпПоцене: 10рубНепроданныетовары:
Всегопренесенно:11Кол-вопроданно:11Кол-вонепроданно:0 Выручка:200руб
当我从一个内置的jar中执行它时,这就是它的样子:
??? ??????:
????????? ??????:特德? ????:100 ??? ???? ?? ????:10 ??? ???? ?? ????:10 ??? ???? ?? ????:10 ??? ???? ?? ????:
10 ??? ???? ?? ????:10 ??? ???? ?? ????:10 ??? ???? ?? ????: 10 ??? ???? ?? ????:10 ??? ???? ?? ????:10 ??? ???? ?? ????: 10 ????? ????????? ??????:
????? ??????????:11 ??? ??? ????????:11 ??? ??? ?? ????????:0 ???????:200 ???
这是我的代码:
public void writeToFile(Purchase purchase, String dir) throws Exception {
file = new File(dir);
if (!file.exists()) {
file.createNewFile();
}
printer.println(purchase.getName() + " По цене: "
+ purchase.getPrice() + "руб");
Timer timer = new Timer();
}
public void writeFooter(List<Purchase> list) throws Exception {
int amountSold = 0;
int amountNotSold = 0;
int moneyRecieved = 0;
if (file == null) {
file = new File(dir);
}
if (!file.exists()) {
file.createNewFile();
}
openStreams();
printer.println("Все товары: ");
for(int i = 0; i < list.size();i++){
writeToFile(list.get(i), dir);
}
printer.println();
printer.println("Проданные товары: ");
for (int i = 0; i <= list.size() - 1; i++) {
if (list.get(i).isSold()) {
writeToFile(list.get(i), dir);
amountSold++;
moneyRecieved += list.get(i).getPrice();
}
}
printer.println();
printer.println("Не проданные товары: ");
for (int i = 0; i <= list.size() - 1; i++) {
if (!list.get(i).isSold()) {
writeToFile(list.get(i), dir);
amountNotSold++;
}
}
printer.println();
printer.println("Всего пренесенно: " + list.size());
printer.println("Кол-во проданно: " + amountSold);
printer.println("Кол-во не проданно: " + amountNotSold);
printer.println("Выручка: " + moneyRecieved + "руб");
closeStreams();
}
答案 0 :(得分:1)
在下文中,可以省略编码“UTF-8”,然后使用当前平台编码:System.getProperty("file.encoding")
。
PrintWriter printer = new Printer(
new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
还要注意编辑器编码和javac编译器编码是一样的;如果你想传递消息来源。也许在IDE中明确地将它们设置为UTF-8。