当前位置:首页 > 编程知识 > 正文

理解Java FileInputStream

Java FileInputStream 是用于从文件系统的文件中获得输入字节的标准输入流. 它是InputStream的具体实现.

1、FileInputStream的创建和读取

我们可以使用文件的名称或File对象来创建一个新的FileInputStream。创建对象后,我们可以通过read()方法一次读取一个字节或一个字节数组,直到读完文件中的所有数据。

import java.io.FileInputStream;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            FileInputStream fileStream = new FileInputStream("example.txt");
            int i;
            while((i=fileStream.read()) != -1) {
                System.out.print((char)i);
            }
            fileStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2、FileInputStream的异常处理

FileInputStream在处理文件资源时,可能会因为文件不存在、文件被占用等原因引发IOException。因此,我们需要在使用FileInputStream的过程中,添加适当的异常处理代码。

import java.io.FileInputStream;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        FileInputStream fileStream = null;
        try {
            fileStream = new FileInputStream("example.txt");
            int i;
            while((i=fileStream.read()) != -1) {
                System.out.print((char)i);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fileStream!=null) {
                try {
                    fileStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

3、FileInputStream与FileDescriptor

Java FileInputStream还可以接受一个FileDescriptor作为参数来创建新的FileInputStream。FileDescriptor可以被用来表示开放的文件、开放的socket等。这使得我们可以直接基于已有的文件或socket来操作,而无需再次打开。

import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            FileOutputStream fileOut = new FileOutputStream("example.txt");
            FileInputStream fileIn = new FileInputStream(fileOut.getFD());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}