2014-01-25 2 views
0

У меня есть следующие String[]:добавляющих Символы в файл

63,64,65,66,67,68,69,6A,73,74,75,76,77,78,79,7A, 
83,84,85,86,87,88,89,8A,92,93,94,95,96,97,98,99 

Каждый элемент является HEX ASCII код символа:

63 -> 'c' 
64 -> 'd' 
etc.. 

Так вот отношения части моего кода, он должен записать соответствующие символы ASCII в файле:

private static HashMap<String, Integer> HEXMAP; 
static { 
    HEXMAP = new HashMap<String, Integer>(); 
    HEXMAP.put("0", 0); 
    HEXMAP.put("1", 1); 
    HEXMAP.put("2", 2); 
    HEXMAP.put("3", 3); 
    HEXMAP.put("4", 4); 
    HEXMAP.put("5", 5); 
    HEXMAP.put("6", 6); 
    HEXMAP.put("7", 7); 
    HEXMAP.put("8", 8); 
    HEXMAP.put("9", 9); 
    HEXMAP.put("A", 10); 
    HEXMAP.put("B", 11); 
    HEXMAP.put("C", 12); 
    HEXMAP.put("D", 13); 
    HEXMAP.put("E", 14); 
    HEXMAP.put("F", 15); 
} 


public static void main(String[] args) { 
    try { 
     PrintWriter writer = new PrintWriter("resultFile"); 
     for (String str : myString) { 
      append(str, writer); 
     } 
     writer.close(); 
    } 
    catch(Exception e) { 

    } 
} 

private static int strToHex(String str) { 
    return HEXMAP.get(str.substring(0, 1)) * 16 + HEXMAP.get(str.substring(1, 2)); 
} 

private static void append(String hex, PrintWriter writer) { 
    writer.print((char) strToHex(hex)); 
} 

Проблема заключается в том, что, вместо того, чтобы это:

enter image description here

У меня есть следующие в моем результирующем файле:

enter image description here

(скриншоты выше из шестнадцатеричного редактора)

+0

Что такое 'HEXMAP'? Это, безусловно, актуально. –

+0

Не совсем, но здесь вы идете. Я уверен, что преобразование в Str на Hex отлично (strToHex («99») -> 153, strToHex («98») -> 152). –

ответ

1

A java.io.Writer выполняет перевод с Java 'char' на конкретную кодировку символов в fi ле. Когда эта кодировка не указана явно, то будет кодированиемпо умолчанию для вашего компьютера (зависит от настроек вашей операционной системы «Страны & Языков»)

В вашем случае, вы уже знаете, какие байты вы хотите написать файл, поэтому вы не должны использовать байт Writer, вы должны использовать java.io.OutputStream. Подкласс OutputStream, который записывает в файл, - java.io.FileOutputStream.

Замените Writer на номер FileOutputStream в вашем примере и на номер writer.print( с номером .write( и он должен работать.

В качестве альтернативы, если вы знаете кодировку, в которой находятся ваши данные, вы можете добавить эту кодировку в качестве второго аргумента в вызов конструктора new PrintWriter. Похоже, вы можете использовать кодировку ISO-8859-1, так что вы также можете сказать new PrintWriter("resultFile", "ISO-8859-1"). Но вы должны сделать это только в том случае, если вы действительно собираетесь писать символы в этой кодировке, а не потому, что это просто работает - между Writer и OutputStream существует четкая разница.

+0

Абсолютно! Примут через 6 минут :) –

0

Вам нужно отладить его с помощью отладчика, как в Eclipse. Я предполагаю, что проблема заключается в анализе ввода в массив myString. В результате вы получаете неожиданное значение после 7A, затем вы добавляете функцию добавления, и поскольку у вас есть пустой блок catch, исключение проглатывается. Вы можете начать с добавления e.printStackTrace() в блок catch.

+0

Я действительно использую Eclipse, и мой блок catch не пуст, я просто поставлю только соответствующий код. –

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