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();
    }

猜你喜欢

转载自www.cnblogs.com/zhuobo/p/10657501.html