Java, Чтение программы в файл, вывод - символы

Я пытался прочитать файл, и он выбрасывал символы. Я думаю, что это неправильная кодировка, но я пробовал разные типы кодирования без какого-либо прогресса. Код ниже, а также вывод. Любые идеи были бы хорошы.

InputStream HostFile = new FileInputStream(location + FileName); 
Reader file = new InputStreamReader(HostFile, "UTF8");
PrintWriter writer = new PrintWriter(".\\Files\\TempFPF.txt", "UTF8");

while (file.ready()) {
     writer.print((char) file.read());
}
writer.close();

Выход:

坕⁕ㄸ⼸㤰䴠剁䴯䕋匭义倠条⁥റഊ嬊传偆崠਍ⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭ਍坕さㄸ‸†㤰䅍㉒㄰‹†䬠䭍ⵅ南卓†䈠㠷‹㝎㤸塅†䕒䕌十⁅㔱㤳〠䴸剁㤱਍䙏⁐‱††䕇⁎䥍䍔䕈䱌䤠呎ⵌ䡃乁䥇...

Можете ли вы предоставить свой входной файл?

CryptoFool 08.03.2019 18:23

Входной файл представляет собой план полета. В нем 500 строк, так что плохо вставить несколько строк. UWU 818/09 MAR/MKE-SIN Страница 1 [ OFP ] ------------------------------------ ---------------------------------------‌​-------- UWU0818 09 МАР 2019 KMKE-WSSS B789 N789EX ВЫПУСК 1539 08 МАРТ 19 OFP 1 ПОКОЛЕНИЕ MITCHELL INTL- CHANGI WX PROG 0912 0915 0918 0921 1000 1003 1006 1009 OBS 0806 0806 0806 0806 0806 0806 0806 0806 ATC C/S UWU818 KMKE/MKE WSSS/SIN CRZ SYS CI 160

TheSpaceWolf 08.03.2019 18:24

Но это все ASCII, как я это вижу здесь. Это правда... файл обычный ASCII? - Я не думаю, что это возможно, так как тогда вы не будете получать специальные символы в выводе, независимо от того, что вы делаете.

CryptoFool 08.03.2019 18:25

Я безуспешно пытался прочитать файл в формате ASCII. Notepad++ сообщает об этом как о кодировке файла UTF-8.

TheSpaceWolf 08.03.2019 18:28

Я не рекомендую вам читать посимвольно, если исходный файл закодирован в utf8, потому что длина символа превышает один байт. Когда вы записываете его в новый файл, по умолчанию он преобразует символ длины в один байт в utf8, а конечный файл будет больше по размеру и отличается. Если ваш исходный файл является текстовым, читайте построчно, иначе по байтам. Пожалуйста, обратитесь к этим ссылкам для различных вариантов. Вы можете прочитать весь файл за одно чтение, если хотите. journaldev.com/867/java-read-text-файл

Hichem BOUSSETTA 08.03.2019 18:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
5
39
2

Ответы 2

Я думаю, ваша проблема в том, что вы написали "UTF8", когда вместо этого должно быть "UTF-8" (обратите внимание на тире). Вы также можете использовать StandardCharsets.UTF_8.name(); из java.nio.charset.StandardCharsets

Вывод остается прежним даже с StandardCharsets.UTF_8.name() и добавлением тире в UTF-8.

TheSpaceWolf 08.03.2019 18:36

Можете ли вы загрузить файл куда-нибудь, чтобы мы могли видеть, что с ним что-то не так?

Skrelp 08.03.2019 18:37

Да, файл здесь: drive.google.com/open?id=15sZt4EPkaBScklgPw8L6UzVaWZdElJOZ Мне кажется, что я не получаю полной картины того, что делает код.

TheSpaceWolf 08.03.2019 18:39

Используя предоставленный вами код и предоставленный вами файл, код работает для меня, и я не получаю никаких странных символов. Здесь должно быть что-то еще, что не так

Skrelp 08.03.2019 18:51

Странный. буду копать дальше и посмотрю что найду

TheSpaceWolf 08.03.2019 18:54

Когда я запускаю отладчик, он фактически не «захватывает» точку останова внутри метода.

TheSpaceWolf 08.03.2019 18:57

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

Другие вопросы по теме