Java 使用BufferedInputStream读取文件
我是Java编程新手,当时正在使用BufferedInputStream()读取a文件。有人能告诉我为什么我不能读我的文件吗?如果我打印obj.read(),它每次都返回-1。相反,它应该返回流正在读取的每个字符的unicode值Java 使用BufferedInputStream读取文件,java,Java,我是Java编程新手,当时正在使用BufferedInputStream()读取a文件。有人能告诉我为什么我不能读我的文件吗?如果我打印obj.read(),它每次都返回-1。相反,它应该返回流正在读取的每个字符的unicode值 import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.FileInputStream; public class Main { public st
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
public class Main {
public static void main(String[] args) {
try {
FileInputStream obj = new FileInputStream("myfile.txt");
BufferedInputStream obj2= new BufferedInputStream(obj);
while(obj2.read()!=-1)
{
System.out.print((char) obj2.read());
}
}
catch (Exception e)
{
System.out.println(e);
}
System.out.println("program executed");
}
}
但在引入局部变量后,代码就可以工作了,为什么
package com.company;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
public class Main {
public static void main(String[] args) {
try {
FileInputStream obj = new FileInputStream("riten.txt");
BufferedInputStream obj2= new BufferedInputStream(obj);
int a;
while((a=obj2.read())!=-1)
{
System.out.print((char)a);
}
}
catch (Exception e)
{
System.out.println(e);
}
System.out.println("program executed");
}
}
您需要从BufferedInputStream读取,而不是从FileInputStream读取。你在这里混东西 但是除了代码之外,您还需要正确处理流,即当您打开一个文件时,您需要在之后关闭这些文件 对代码的修复。我添加了一个局部变量来存储读取的字符,然后将其转换为一个字符
public static void main(String[] args) {
try {
FileInputStream obj = new FileInputStream("myfile.txt");
BufferedInputStream obj2= new BufferedInputStream(obj);
int c;
while((c = obj2.read())!=-1)
{
System.out.print((char) c);
}
}
catch (Exception e)
{
System.out.println(e);
}
System.out.println("program executed");
}
可能是因为你的程序无法编译。第N行出现语法错误-编译器肯定会告诉您行号。@AlexShesterov很抱歉,我已经纠正了错误,我仍然没有得到输出。在循环中,我正在将unicode值转换为char以获得输出。在第一个示例中,您要做的第一件事是从“缓冲流”中读取,这意味着它读取大量字节作为缓冲区。然后从“FileInputStream”调用read,但它已被使用,因为BufferedInputStream读取整个文件。不要从同一个流读取不同的流@马特,谢谢你的帮助,伙计!祝你有愉快的一天。为什么我需要引入一个局部变量?如果它返回一个字节,为什么你要将它转换为char:(一旦从流中读取了一个值,指针就会继续移动。对read()的后续调用)将只返回下一个值。因此,如果您不将其存储到一个变量中以便在您的情况下打印,它将丢失。@ritenhagra将字符转换为
char
将导致被调用,而不是@spehler62。非常感谢您。您是生命的救星。