Метод FileReader read () печатается некорректно.Нужно ли делать какие-либо дополнительные преобразования, кроме int (ASCII rep) в char? - PullRequest
0 голосов
/ 07 февраля 2019

При попытке вывести на консоль вывод read () той же программы, символы либо отсутствуют, либо расстроены.Пробовал это также для разных файлов, получая ту же проблему.

Класс и метод байтового потока FileInputStream.read () для кода того же типа работал отлично, но этот поток символов получается по-разному.

import java.io.*;
import java.util.Scanner;
import static java.lang.System.*;

class CSRead1 
{
    public static void main(String[] args) throws IOException
    {
        Scanner input = new Scanner(in);
        out.print("Enter the filename\t>"); 
        String file = input.next();

        try(FileReader fr = new FileReader(file))
        {   while(fr.read() != -1)
            {out.print((char)fr.read());} } //***reading improperly
    }
}

Получено при выполнении:

D:\JavaEx\FILE-IO>java CSRead1
Enter the filename      >CSRead1.java
ipr aaui.cne;
{asCRa1aaln.ytm*
pbi ttcvi anSrn[ rs hosIEcpin
{
        cne nu  e cne(n;
        u.rn(Etrteflnm\>)
        tyFlRae r=nwFlRae(ie)
                hl(rra( =-)
        {u.rn(ca)rra()}}/**edn mrpry

}
?

Для текстового файла, содержащего единственную строку «Hello»

D:\JavaEx\FILE-IO>java CSRead1
Enter the filename      >sample
el?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Однажды у меня возникла проблема с чтением файлов с символами в кодировке UTF-8.Решение было:

String st;
File filedir = new File(filename);
BufferedReader in = new BufferedReader(new InputStreamReader(new 
FileInputStream(filedir), "UTF8"));
while((st = in.readLine()) != null) {
    System.out.println(st); //prints out properly on my side
}

в вашем коде это выглядело бы примерно так:

public static void main(String[] args) throws IOException
{
    Scanner input = new Scanner(in);
    out.print("Enter the filename\t>"); 
    String file = input.next();

    String st;
    File filedir = new File(file );
    BufferedReader in = new BufferedReader(new InputStreamReader(new 
    FileInputStream(filedir), "UTF8"));
    while((st = in.readLine()) != null) {
        System.out.println(st);
    }
}
0 голосов
/ 07 февраля 2019

Вы читаете два символа на каждой итерации: один в while состоянии и один в теле цикла.Попробуйте исправить эту проблему, и весь ваш код будет работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...