2016-09-07 2 views
0

Итак, у меня есть программа, которая собирает кучу данных и непрерывно объединяет данные в строку с одним пробелом между каждой записью. Во время моей закрытой процедуры я печатаю String в txt-файл, используя буферизованный писатель. Примерно в 50% случаев данные отображаются как (в основном) китайские символы. Является ли виртуальная машина каким-то странным материалом Unicode? Почему это происходит иногда?Буферизованный писатель иногда создает символы, а не цифры

Я просмотрел другие форумы и не видел других примеров этой проблемы. Ни одна из других майоров CS, которых я знаю, не понимает, что происходит.

EDIT: данные представляют собой целочисленные числа в диапазоне 0-1365;

ОБНОВЛЕНИЕ: после дальнейших исследований я нашел this, что заставляет меня думать, что может понадобиться PrintStream, а не BufferedWriter, кто-нибудь может с этим поговорить? Я протестировал PrintStream, и я не смогу его создать с помощью FileWriter, поскольку я бы использовал BufferedWriter, что означает, что мне нужно больше исследований для записи в мой txt.

UPDATE: печать на консоль не вызывает эту ошибку. Я приму ответ, который объясняет, как Notepad (программа, которую я использую для открытия 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 

Этот набор данных был взят через несколько секунд, и не то, что я хочу

㐀ㄹ㈠㤰㐠㔸㈠㈱㐠㠶㈠㐱㐠㘲㈠㘰㌠㠷ㄠ㔹㌠㌳ㄠ㌹㈠㘹㈠㄰㈠㠷㈠㜳㈠㐶㈠㐷㈠㐶㈠㔷㈠㌶㈠㔵㈠㐵㈠㠰㈠㤴ㄠ㔲㈠㤴㐠‶㐲‹㌱㈠㘴〠㈠㘴〠㈠㘴〠㈠㜴〠㈠㠴〠㈠㠴〠㈠㜴㠠㈠㔴ㄠ‶㐲‵㤱㈠㔴ㄠ‹㐲‵㠱㈠㜴ㄠ‶㐲‹ㄱ㈠〵ㄠ‰㔲‰〱 
+0

Также, хотя это около 50%, это не каждый раз – Czarking

+1

Что заставляет вас думать, что данные сами по себе не являются странными китайскими символами? Я был бы менее склонен обвинять его в BufferedWriter, чем данные – Stoud

+0

. Хороший момент. Я редактировал свой вопрос; данные представляют собой целые числа в диапазоне от 0-1356; Я не включил весь код, потому что он слишком длинный. – Czarking

ответ

1

BufferedWriter не делает ошибку, и код является правильным для избыточность с помощью

this.saveFile.delete(); 
try{this.saveFile.createNewFile();} 
       catch (IOException e){System.out.println("File creation error");} 

и

new FileWriter 

ошибка при чтении данных происходит, когда файл открыт, за исключением , В зависимости от того, какая программа открывает данные, отображаются разные результаты из-за того, как программа считывает данные. Блокнот отображал символы, потому что он интерпретировал числа как ASCII. Консоль не пыталась интерпретировать данные и просто отображала то, что было написано на ней. Использование программы, которая не пытается интерпретировать номера в файле, позволит просматривать данные правильно.

0

Поскольку вы не указали и не указали, какие данные вы записываете в поток, вы являетесь proba bly испытывает куст спрятал факты явление.

+0

спасибо, отредактированный выше, Bd9 – Czarking

Смежные вопросы