2016-12-11 5 views
0

У меня есть небольшая проблема при написании файлов на Java.Java - Буферизованный Writer пишет кубы Не int

Я создал новый файл, используя File f = new File(path); и a BufferedWriter, который пишет в этот файл. И один int i = 1; Теперь буферизованный писатель (файловый писатель) должен написать int i в файл , но он этого не делает, он пишет CUBES! Подобно этому. И Когда сканер считывает файл, он читает этот куб, и ошибка происходит,

Вот пример:

int i = 1; 
File f = new File(path); 
BufferedWriter bw = new BufferedWriter(new FileWriter(f)); 
bw.write(i); 

int b = 0; 
Scanner s = new Scanner(new FileReader(f)); 
b = s.nextInt(); 
//end 

Но по какой-то причине он пишет куб ■ не номер 1, и вот почему сканер не может прочитать его.

Любые идеи, почему это происходит? -Спасибо за помощь. ■

+1

Вы потрудились * прочитать * javadoc ['BufferedWriter.write (int c)'] (https://docs.oracle.com/javase/8/docs/api/java/io/BufferedWriter. html # write-int-) метод, который вы вызываете? В нем написано: * Записывает один символ. * Он не записывает число с десятичными знаками base-10. Для этого вы должны использовать «PrintWriter» и вызывать ['print (int i)'] (https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html#print- int-). – Andreas

+0

@ Andreas Bonus question: Если вы действительно хотели написать номер базы 10, какой код символа вы бы использовали (не то, что я рекомендую это)? –

ответ

1

Метод записи не записывает значение interger как текст, но целое число интерпретируется как код символа.

Вам лучше использовать PrintWriter, что более удобно. С его помощью вы можете использовать те же методы печати, что и в System.out.

PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(f))); 
writer.print(i); 

Вы также должны знать, что вы неявно используют кодировку платформы по умолчанию, который CP1252 (Windows ANSI) для Windows, и, как правило, UTF-8 для Linux. Чтобы избежать неожиданного поведения, рекомендуется всегда задавать кодировку символов явно. Затем вы получаете:

PrintWriter writer = new PrintWriter(new BufferedWriter(
    new OutputStreamWriter(new FileOutputStream(f), "UTF-8"))); 

Это немного сложнее, но кодировка файла находится под вашим контролем.

+0

Да, это то, что мне нужно. Это работает, потрясающе. Могу ли я узнать, почему я получил отрицательный голос? И спасибо за помощь !!! –

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