2009-09-07 2 views
2

Если у меня есть файл, и я хочу буквально записать ему «42» (значение, а не строку), которое, например, равно 2а в шестнадцатеричном формате , как мне это сделать? Я хочу иметь возможность использовать что-то вроде outfile.write (42) или outfile.write (2a) и не писать строку в файл.(Java) Запись десятичной/шестнадцатеричной в файл, а не строка

(Я понимаю, что это простой вопрос, но я не могу найти ответ на Google, вероятно, потому что я не знаю, правильные условия поиска)

ответ

7

Для записи двоичных данных, которые вы хотите использовать OutputStream (например, FileOutputStream).

Если вы обнаружите, что ваши данные записываются в виде строк, то вы, вероятно, с помощью Writer (например, как FileWriter или в OutputStreamWriter обернутый вокруг FileOutputStream). Все под названием «*Writer» или «*Reader» занимается исключительно текстом/String s. Вы захотите их избежать, если хотите записать двоичные данные.

Если вы хотите написать разные типы данных (а не просто byte s), тогда вы захотите изучить DataOutputStream.

+0

Ах! Только поздно. Неплохо! :) – vpram86

+0

как интересный в стороне: взгляните на классы java.util.zip. *, Которые обеспечивают сжатие на лету. Вы можете передать их в конструктор DataOutputStream и сэкономить довольно много диска. IO –

1
+0

Здесь нет необходимости использовать DataOutputStream. –

+0

Не могли бы вы объяснить мне, почему? Во всяком случае, я просто сказал, что он может использовать его. :) – vpram86

+0

Если вы хотите писать байты, то любой OutputStream в порядке. Только если вы хотите напрямую написать ints/longs/floats/doubles/..., вы можете использовать DataOutputStream для преобразования в байты для вас. –

0

Если вы просто хотите писать байт, следующий будет достаточно:

import java.io.*; 
... 
OutputStream out = new FileOutputStream("MyFile"); 
try { 
    // Write one byte ... 
    out.write((byte) 42); 
    // Write multiple bytes ... 
    byte[] bytes = ... 
    int nosWritten = out.write(bytes, 0, bytes.length); 

} finally { 
    out.close(); 
} 

Обработка исключений остается в качестве упражнения для читателя :-)

+0

На самом деле, если вы хотите написать весь массив, тогда «out.write (bytes)» будет в порядке, вам не нужно использовать версию с тремя аргументами. –

+0

@Joachim: Я знаю. Это пример. –

2
OutputStream os = new FileOutputStream(fileName); 
    String text = "42"; 
    byte value = Byte.parseByte(text); 
    os.write(value); 
    os.close(); 
Смежные вопросы