ava.io.InputStream & java.io.FileInputStream

时间:2023-03-09 08:15:51
ava.io.InputStream & java.io.FileInputStream

java.io.InputStream & java.io.FileInputStream

java.io.InputStream,这个抽象类是表示字节输入流的超类,这个抽象类的共性的方法有:

方法 作用
int read() 从输入流中读取数据的下一个字节,并返回,到末尾就返回-1
int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b之中
void close() 关闭输入流,并释放与输入流相关的系统资源

java.io.FileInputStream extends InputStream

构造方法

构造方法 作用
FileInputStream(String name) 创建一个FileInputStream对象,把该对象指向构造方法参数中指定的文件
FileInputStream(File file) 创建一个FileInputStream对象,把该对象指向构造方法参数中指定的文件

参数:String name(文件路径)、File file(文件对象)

2、读取文件

java程序 --> JVM --> OS --> OS调用读取数据的方法 --> 读取文件

3、字节输入流读取文件的步骤

  • 创建FileInputStream对象,构造方法中指定要读取的文件(路径名或者文件对象)
  • 使用FileInputStream对象的方法read,读取文件
  • 使用FileInputStream对象的方法close,释放资源
package cn.zhuobo.day14.streamOutput;

import java.io.FileInputStream;

import java.io.IOException;

public class Demo02FileInputStream {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("/home/zhuobo/Desktop/a.txt");
/*int i = fis.read();
System.out.println(i);// 98
i = fis.read();
System.out.println(i);// 99
i = fis.read();
System.out.println(i);// 104*/
int i = 0;
while ((i = fis.read()) != -1) {
System.out.println(i);
}// 循环读取直到末尾,-1是末尾
}
}

4、字节输入流一次读取一个字节的原理

每次指针向后移动一个单位

5、一次读取多个字节

使用int read(byte[] b)

byte[] bytes = new byte[5];// 每次读取最多5个,但是一般定义长度为1024
int len = fis.read(bytes);// len指的是读取的有效字节个数
String str = new String(bytes);
System.out.println(len);
System.out.println(str); byte[] bytes = new byte[1024];
int len = 0;
while ((len = fis.read(bytes)) != -1) {
System.out.println((new String(bytes)).trim());
}

6、文件复制练习

原文件-->读出来-->写进去-->目标文件

package cn.zhuobo.day14.streamOutput;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class FileCopy {
public static void main(String[] args) throws IOException {
File fileDes = new File("/home/zhuobo/Desktop/22.png");
FileOutputStream fos = new FileOutputStream(fileDes);
File fileSource = new File("/home/zhuobo/Desktop/dir/1.png");
FileInputStream fis = new FileInputStream(fileSource); int len = 0;
byte[] bytes = new byte[1024];
while((len = fis.read(bytes)) != -1) {
fos.write(bytes, 0, len);
} // 先关闭写的流(output)再关闭读的流(input)
fos.close();
fis.close();
}