Здесь есть несколько проблем.
Проблема 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()));
}
Который использует кодировку по умолчанию для преобразования байтов в символы.