尝试将同一程序的read()输出打印到控制台时,字符丢失或排列混乱。对不同的文件也尝试了这一点,得到相同的问题。
对于相同类型的代码,byte Stream类和方法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?发布于 2019-02-07 17:40:54
您在每次迭代中读取两个字符:一个在while条件中,一个在循环体中。尝试解决此问题,您的所有代码都将正常工作。
发布于 2019-02-07 17:58:36
我曾经在读取包含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);
}
}https://stackoverflow.com/questions/54570282
复制相似问题