2011-12-15 3 views
0

В моем приложении Java я должен прочитать один файл. Проблема, перед которой я столкнулся, после прочтения файла, результаты приходят как нечитаемый формат. это означает, что отображаются некоторые символы ascii. Это означает, что ни одна из букв не может быть прочитана. Как я могу показать это?java file reading issue

// Open the file that is the first 
     // command line parameter 

     FileInputStream fstream = new FileInputStream("c:\\hello.txt"); 
     // Get the object of DataInputStream 
     DataInputStream in = new DataInputStream(fstream); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     String strLine; 
     // Read File Line By Line 
     while ((strLine = br.readLine()) != null) { 
      // Print the content on the console 
      System.out.println(strLine); 
     } 
     // Close the input stream 
     in.close(); 
    } catch (Exception e) {// Catch exception if any 
     System.err.println("Error: " + e.getMessage()); 
    } 
+0

Каково содержание hello.txt и что отображается на выходе? – Manish

+0

Похоже, проблема с кодировкой. Как было написано «hello.txt»? Возникает ли та же проблема с другими текстовыми файлами? –

+1

Проверка кодировки файла работает с кодировкой вашей системы. Java должен использовать кодировку по умолчанию. – Steven

ответ

0

Моя проблема удалось решить. Я не знаю, как это сделать. Я скопировал содержимое hello.txt в другой файл и запустил java-программу. Я мог читать все письма. Не знаю, в чем проблема.

0

Вы должны реализовать этот способ обработки: -

BufferedReader br = new BufferedReader(new InputStreamReader(in, encodingformat)); 

.

encodingformat - измените его в соответствии с типом проблемы с кодировкой, с которой вы сталкиваетесь.

Примеры: UTF-8, UTF-16 ... скоро

См этот Supported Encodings by Java SE 6 для получения дополнительной информации.

+1

откуда вы знаете, что файл находится в UTF-8? – buruzaemon

+0

@buruzaemon: да, так как человек не упоминает, какой тип кодирования проблемы. По этой причине я назвал базовый формат «UTF-8». Исходя из его вопроса о форматировании, он должен соответствующим образом изменить его. Это технически он должен справиться. Что не так в моем ответе, который был награжден как «-1»? –

+0

Вы не знаете. Но этот исходный фрагмент предлагает вам указать его. –

1

Возможно, у вас есть ошибка кодирования. Конструктор, который вы используете для InputStreamReader, использует кодировку по умолчанию; если ваш файл содержит текст UTF-8 вне диапазона ASCII, вы получите мусор. Кроме того, вам не нужен DataInputStream, поскольку вы не читаете никаких объектов данных из потока. Попробуйте этот код:

FileInputStream fstream = null; 
try { 
    fstream = new FileInputStream("c:\\hello.txt"); 
    // Decode data using UTF-8 
    BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8")); 
    String strLine; 
    // Read File Line By Line 
    while ((strLine = br.readLine()) != null) { 
     // Print the content on the console 
     System.out.println(strLine); 
    } 
} catch (Exception e) {// Catch exception if any 
    System.err.println("Error: " + e.getMessage()); 
} finally { 
    if (fstream != null) { 
     try { fstream.close(); } 
     catch (IOException e) { 
      // log failure to close file 
     } 
    } 
} 
+0

Я предлагаю использовать некоторые утилиты для этого. Например, в commons-io есть IOUtils.readLines (inputStream, encoding) и IOUtils.closeQuietely (someSource) –

+0

@PetrGladkikh - Да, утилиты вроде commons-io хороши. Спасибо, что упомянул об этом. –

0

Поскольку вы не знаете кодировку файла находится, используйте jchardet определить кодировку, используемую в файле, а затем использовать эту кодировку, чтобы прочитать файл, как другие уже предложили. Это не 100% доказательство дурака, но работает для вашего сценария.

Кроме того, использование DataInputStream не является обязательным.

0

Выход вы получаете это значение ASCII, так что вам нужно ввести поверг в полукокса или строку перед печатью it.Hope это помогает