Буферный входной поток Java не считывается

У меня возникают проблемы с поиском буферизованных входных потоков. Нам нужно создать программу текстового редактора на Java. У меня есть несколько примеров из класса в качестве ориентира, но до сих пор не удалось это выяснить. По моему мнению, я запустил цикл с чтением, затем он должен прочитать весь файл в редакторе. Я уверен, что прочитал как // Открытый файл openItem . addActionListener ( новый ActionListener () { public void actionPerformed ( ActionEvent e ) { JFileChooser jfc = new JFileChooser (); jfc . setCurrentDirectory ( новый файл ( "." )); int result = jfc . showOpenDialog ( null ); if ( result == JFileChooser . APPROVE_OPTION ) { Файл selectedFile = jfc . getSelectedFile (); BufferedInputStream bis = null ; try { bis = new BufferedInputStream ( новый FileInputStream ( selectedFile ) ); char inChar = ( char ) бис . read (); while ( inChar ! = - 1 ) { // inChar = (char) bis.read (); Строка charToString = символ . toString ( inChar ); textArea . setText ( charToString ); } } catch ( Исключение e2 ) { e2 . printStackTrace (); } } } }); затем установите его в BufferedInputStream # read (), используя .tochar. Теперь он скомпилирует, но замораживает программу, поэтому у меня должен быть бесконечный цикл, но я не уверен, почему.

inChar != -1

java,

-2

Ответов: 1


2

Здесь есть несколько проблем.

Проблема 1 : Stringсчитывает байты, а не символы. Это приведет к результатам, которые «работают» для потоков ASCII, но не сработают для других многобайтовых кодировок, таких как UTF-8.

Проблема 2 : charзначения не соответствуют значению в Java, поэтому выражение всегда будет истинным. Я думаю, что это то, что заставляет ваше приложение замораживать.public static String readFileAsString(File inputFile) throws IOException { try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(inputFile))) { StringBuilder sb = new StringBuilder(); for (int in = bis.read(); in != -1; in = bis.read()) { sb.append((char)in); } return sb.toString(); } }

Проблема 3 : вы не закрываете файл после его использования.

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

Если вы хотите сохранить текущую структуру, код должен выглядеть следующим образом, но все же проблема 1 .

String

Есть более простые способы читать весь файл как Stringс Java. Одна из возможностей Java8 - вот что:

public static String readFileAsString(File inputFile) throws IOException {
  return new String(Files.readAllBytes(inputFile.toPath()));
}

Который использует кодировку по умолчанию для преобразования байтов в символы.

Ява,
Похожие вопросы