Итак, у меня есть программа, которая собирает кучу данных и непрерывно объединяет данные в строку с одним пробелом между каждой записью. Во время моей процедуры закрытия я печатаю строку в текстовый файл, используя буферизованный писатель. Около 50% времени данные отображаются (в основном) в виде китайских символов. Делает ли виртуальная машина какие-то странные вещи с Unicode? Почему это происходит только иногда?
Я просмотрел другие форумы и не видел других случаев этой проблемы. Никто из других известных мне CS-специалистов не понимает, что происходит.
РЕДАКТИРОВАТЬ: данные представляют собой все целые числа в диапазоне 0-1365;
ОБНОВЛЕНИЕ: после дальнейших исследований я нашел это, что заставляет меня задуматься a может понадобиться PrintStream, а не BufferedWriter, кто-нибудь может сказать об этом? Я протестировал PrintStream, и я не смогу построить его с помощью FileWriter, как с BufferedWriter, а это означает, что мне нужно больше исследований, чтобы написать в мой txt.
ОБНОВЛЕНИЕ: при печати на консоль эта ошибка не возникает. Я приму ответ, который объясняет, как Блокнот (программа, которую я использую для открытия txt) иногда отображает числа, а иногда отображает символы.
Вот соответствующий код:
//fields
private static BufferedWriter out;
private File saveFile;
String data;
//inside constructor
this.saveFile = new File("C:\\Users\\HPlaptop\\Desktop\\MouseData.txt");
this.saveFile.delete();
try{this.saveFile.createNewFile();}
catch (IOException e ){System.out.println("File creation error");}
try {out = new BufferedWriter(new FileWriter("C:\\Users\\HPlaptop\\Desktop\\MouseData.txt"));}
catch (IOException e) {System.out.println("IO Error");}
this.control.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ //there is a method call here but the basics are below
out.write(data);
out.close();
System.exit(0);
}
});
Вот пример набора данных, напечатанного правильно:
1365 767 1365 767 1365 767 1364 767 1353 756 1268 692 1114 604 980 488 812 334 744 283 694 244 593 150 473 81 328 13 207 0 124 0 115 0 102 0 99 6 107 13 132 20 173 32 187 31 190 25 194 20 201 17 215 14 221 10 224 7 224 7 224 7 226 6 226 6 226 6 226 6 226 6 226 6 226 6
Этот набор данных был получен через несколько секунд, и это не то, что мне нужно.
㐀ㄹ㈠㤰㐠㔸㈠㈱㐠㠶㈠㐱㐠㘲㈠㘰㌠㠷ㄠ㔹㌠㌳ㄠ㌹㈠㘹㈠㈠㠷㈠㜳㈠㐶㈠㐷㈠㐶㈠㔷㈠㌶㈠㔵㈠㐵㈠㠰㈠㤴ㄠ㔲㈠㤴㐠‶㐲‹㌱㈠㘴〠㈠㘴〠㈠㘴〠㈠㜴〠㈠㠴〠㈠㠴〠㈠㜴㠠㈠㔴ㄠ‶㐲‵㤱㈠㔴ㄠ‹㐲‵㠱㈠㜴ㄠ‶㐲‹ㄱ㈠〵ㄠ‰㔲‰〱
.
BufferedWriter» для символьных данных, а не для целых чисел. Возможно, вы ищетеBufferedOutputStream
? илиDataOutputStream
? NBcreateNewFile()
здесь и бессмысленно, и расточительно.new FileWriter()
уже делает это, а теперь вы принудительно удаляете еще одно. - person user207421   schedule 08.09.2016