我有以下代码允许我通过 Java 中的控制台读取文件的内容(在本例中为 txt)。我不太明白FileInputStream、InputStreamReader和BufferedReader的作用是什么。他们具体是做什么的?谢谢!
public class LeerFichero {
public static void main(String[] args) {
int numero = 0;
try {
Scanner sc = new Scanner(System.in);
System.out.println("Introduce el nombre del fichero: ");
String nombreFichero = sc.nextLine();
String salida = "C:\\Users\\SAG\\Desktop\\Repaso\\src\\leerarchivo\\";
FileInputStream fichero = new FileInputStream(salida + nombreFichero + ".txt");
InputStreamReader osw = new InputStreamReader(fichero);
BufferedReader br = new BufferedReader(osw);
while(br.ready()) {
String linea = br.readLine();
System.out.println(linea);
}
}catch(FileNotFoundException e) {
e.getMessage();
}catch(IOException e) {
e.getMessage();
}
}
}
文件系统中数据的输入输出流程
.I/O 流
对于任何输入或输出数据流,都使用称为流的对象,它们在程序和任何其他外部代理之间传输数据,例如硬件设备、来自控制台的命令输入、与其他程序的通信或读取和写文件。
Java 将流架构分为两大类:
在这两组中,有一种能够格式化数据的类结构,例如读取字节、字符、原始类型甚至对象。缓冲区也可用于优化数据读/写性能。
. 我们区分以下类型的流:
它们是类
java.io.InputStream
和java.io.OutputStream
.在这些当中,我们可以找到像..
. 文件输入流
. 文件输出流
-。这些类可以通过将路径传递给类构造函数中的文件来实例化。考虑到捕获可能的异常。它们通常来自
java.io.IOException
.. 打开流后,它将继续按顺序读取或写入,直到文件末尾。
二进制数据输入输出:
这种类型的流最常用的实现是
FileReader
和FileWriter
:-。
Un InputStreamReader
是字节流和字符流之间的桥梁:它读取字节并使用特定的字符集将它们解码为字符。-。为了提高效率,请考虑将 a 包装
InputStreamReader
在 a 中BufferedReader
。例如:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
字母数字数据输入输出:
BufferedReader:
从字符输入流中读取文本,缓冲字符以提供对这些字符、数组和行的有效读取。以更清晰的方式,它允许我们以简单的方式从 InputStream 中读取文本。FileInputStream用于读取,它实际上与FileReader相同,使用read()方法,当它到达文件末尾时返回 -1。它们的基本区别在于,使用FileReader我们读取字符,而FileInputStream读取字节。例如:
对于 java,Reader类是读取字符的类。这更像是我们想要的。Reader具有读取字符的方法。有了这个类,我们已经可以工作了。可惜我们还有System.in,它是InputStream而不是Reader。
我们如何将System.in转换为Reader?Java 中有一个类InputStreamReader可以为我们进行这种转换。要获得Reader,我们只需通过在构造函数中传递InputStream来实例化InputStreamReader。代码如下
我们声明一个InputStreamReader类型的变量“isr”。我们通过new InputStreamReader(...)创建这个类的一个对象。在括号中,我们传递要转换为Reader的InputStream,在本例中为System.in
我们已经有了Reader。它究竟是如何工作的?
InputStreamReader是一个Reader。它的行为与Reader中的相同,可以放在任何支持Reader的站点上。也就是说,我们可以从中读取字符。在构建它时,我们传递了一个InputStream,特别是System.in。 InputStreamReader以某种方式将其存储在里面。当我们向InputStreamReader询问字符时,它会询问其中存储了字节的InputStream,将它们转换为字符并将它们返回给我们。
从任何其他Reader(例如InputStreamReader )获取BufferedReader的机制类似于我们之前使用的机制。我们通过在构造函数中将Reader传递给它来实例化它。代码是:
此类的行为与InputStreamReader相同。当我们请求一整行字符(一个String)时,它会询问其中的 Reader,将其转换为String并返回给我们。
要请求字符串,请使用readLine()方法。此方法读取所有键入的字符(如果它是另一个输入设备则接收),直到找到击键,或任何你想叫它的东西。
这会从键盘读取完整的字符串并将其存储在“文本”变量中。
我希望这可以帮助你: https ://www.discoduroderoer.es/clases-fileinputstream-y-fileoutputstream-para-ficheros-binarios-en-java/
http://www.javamexico.org/foros/comunidad/outputstream_y_inputstream_que_means_and_how_work 我希望你很清楚
它们主要用于文件操作。