2015-11-10 2 views
2

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

StringBuilder builder = new StringBuilder(); 
String fichier = "achats.txt"; 

try{ 
    InputStream ips=new FileInputStream(fichier); 
    InputStreamReader ipsr=new InputStreamReader(ips); 
    BufferedReader br=new BufferedReader(ipsr); 
    String ligne; 

    while((ligne=br.readLine())!=null){ 
     builder.append(ligne); 
    } 

    br.close(); 
} 
catch (Exception e){ 
    System.out.println(e.toString()); 
} 

Мой текстовый файл Achats является

Жан Буше, 32134564, 543, 54
Жиль Буше, 32145425, 555, 21

У меня есть следующая проблема: после того, как я прочитал ее из файла, мне кажется, что вот так:

J е н В о у с ч е г, 3 2 1 3 4 5 6 4, 5 4 3 5 4

попытке сделать удалить все белое пространство, но все еще остается тем же самым. Мне все равно, как это выглядит на моем скрининге. но мне нужны номера 543 и 555 без пробелов, поэтому я могу преобразовать их из строки в int. Есть ли у кого-нибудь намек на то, как очистить его после прочтения?

+0

В настоящее время вы используете системную кодировку по умолчанию, и я подозреваю, что это проблема. Какова * фактическая * кодировка файла? Я предполагаю, что это UTF-16. # –

+1

(я бы добавил ответ, но не так много, пока вы не подтвердите кодировку файла.) –

+0

моя кодировка Iso-8859-1 для моего XML-файла (да у меня тоже есть). и для .txt-файла это кодировка ansi (я не знаю, как изменить ее на iso-8859-1, так как она не в кодировке txt save) –

ответ

-1

Это происходит потому, что ваш файл содержит данные размером 1 байт, но класс читателя предназначен для чтения символов, а не байтов, и использует 2 байта для каждого символа, считанного из файла. Вы должны использовать классы InputStream, а не классы InputReader.

StringBuilder builder=new StringBuilder(); 
      String fichier="achats.txt"; 
      byte [] ar = new byte[1]; 
      try{ 
       InputStream ips=new FileInputStream(fichier); 
       BufferedInputStream br=new BufferedInputStream(ipsr); 
       ar[0] = -1; 
       while((ar[0] = br.read()) != -1){ 
        builder.append(new String(ar[0])); 
       } 
       ips.close(); 
       br.close(); 
       } 
      catch (Exception e){ 
      System.out.println(e.toString()); 
       } 
+0

Вы предполагаете, что каждый символ представляет собой один байт, и вы по-прежнему эффективно используете системную кодировку по умолчанию. Это * не * способ решить проблему. –

+0

Тогда какой правильный путь? –

+2

Правильный способ - открыть файл, используя правильную кодировку, но все еще используя считыватель. Это * текстовые * данные, а не двоичные данные, поэтому OP * * хочет использовать 'Reader', а не' InputStream' напрямую ... но они должны сделать это с правильной кодировкой. –

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