首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileReader read()方法打印错误。除了int(ASCII rep)到char之外,我还需要做任何额外的转换吗?

FileReader read()方法打印错误。除了int(ASCII rep)到char之外,我还需要做任何额外的转换吗?
EN

Stack Overflow用户
提问于 2019-02-07 17:37:57
回答 2查看 40关注 0票数 1

尝试将同一程序的read()输出打印到控制台时,字符丢失或排列混乱。对不同的文件也尝试了这一点,得到相同的问题。

对于相同类型的代码,byte Stream类和方法FileInputStream.read()工作得非常好,但此字符流的结果有所不同。

代码语言:javascript
复制
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
    }
}

在执行时得到了这个:

代码语言:javascript
复制
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“的文本文件

代码语言:javascript
复制
D:\JavaEx\FILE-IO>java CSRead1
Enter the filename      >sample
el?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-07 17:40:54

您在每次迭代中读取两个字符:一个在while条件中,一个在循环体中。尝试解决此问题,您的所有代码都将正常工作。

票数 2
EN

Stack Overflow用户

发布于 2019-02-07 17:58:36

我曾经在读取包含UTF-8编码字符的文件时遇到过问题。解决方案是:

代码语言:javascript
复制
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
}

在你的代码中,它看起来像这样:

代码语言:javascript
复制
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);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54570282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档