2014-02-12 2 views
2

Я пишу программу переводчика, которая читает переводы из текстового файла. Этот метод читается из текстового файла и добавляет его в объект Map, который я использую для словаря.Java readLine() не работает должным образом

public Map<String, String> loadTranslations() throws IOException { 
    Map<String, String> translations = new HashMap<String, String>(); 
    BufferedReader in = null; 
    try { 
     in = new BufferedReader(new FileReader(System.getProperty("user.dir") + "\\resource\\translations.txt")); 
     englWord = in.readLine(); 
     frenWord = in.readLine(); 
     translations.put(englWord, frenWord); 
     System.out.println(englWord + "\n" + frenWord + "\n" + translations); 
    } catch(Exception e) { 
     JOptionPane.showMessageDialog(this, "An Error Occured!", "Error!", JOptionPane.ERROR_MESSAGE); 
     e.printStackTrace(); 
    } finally { 
     in.close(); 
    } 
    JOptionPane.showMessageDialog(this, "Updated!", "", JOptionPane.INFORMATION_MESSAGE); 
    return translations; 
} 

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

潮攍ੵ渍ੴ睯ഊ摥畸ഊ瑨牥攍ੴ牯楳ഊ景畲ഊ煵慴牥ഊ晩癥ഊ捩湱ഊ獩砍ੳ楸ഊ獥癥渍ੳ数琍੥楧桴ഊ桵楴ഊ湩湥ഊ湥畦ഊ瑥渍੤楸 
null 
{潮攍ੵ渍ੴ睯ഊ摥畸ഊ瑨牥攍ੴ牯楳ഊ景畲ഊ煵慴牥ഊ晩癥ഊ捩湱ഊ獩砍ੳ楸ഊ獥癥渍ੳ数琍੥楧桴ഊ桵楴ഊ湩湥ഊ湥畦ഊ瑥渍੤楸=null} 

В текстовом файле перечислены первые десять букв на английском и французском языках, поэтому выход должен быть чем-то вроде;

one 
un 
{one=un} 

Как исправить это?

+1

Это определенно ошибка Java. –

ответ

3

Если вы не указали кодировку, вы получите значение по умолчанию, которое depends on how the JVM gets initialized. Вы можете явно указать кодировку, как это:

FileInputStream fis = new FileInputStream("test.txt"); 
    InputStreamReader isr = new InputStreamReader(fis, "UTF8"); 
    BufferedReader in = new BufferedReader(isr); 

Этот код считывает файл, в котором он берет на себя содержание кодируется в UTF8.

См. Oracle tutorial on Character and Byte Streams.