Java 使用BufferedInputStream读取文件

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

我是Java编程新手,当时正在使用BufferedInputStream()读取a文件。有人能告诉我为什么我不能读我的文件吗?如果我打印obj.read(),它每次都返回-1。相反,它应该返回流正在读取的每个字符的unicode值

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。非常感谢您。您是生命的救星。