Java中FileInputStream的10个示例

Java中的FileInputStream是一个提供InputStream的类,用于以面向字节的方式从文件中读取数据。它是 java.io 包的一部分,通常用于读取二进制数据,例如图像、音频文件或任何其他包含原始字节的文件。

下面是FileInputStream的解释:

1。目的:
   - FileInputStream 旨在以字节序列的形式从文件中读取数据。在处理数据不被解释为文本的二进制文件时,它特别有用。

2、继承:
   - FileInputStream 扩展了 `InputStream` 类,它是一个用于从不同源读取数据的抽象类。这使得 FileInputStream 适合从文件中读取字节。

3、施工:
   - 要创建 FileInputStream 的实例,通常将要读取的文件的路径传递给其构造函数。例如:

    FileInputStream fis = new FileInputStream( "path/to/file.txt" );

4. 读取字节:
   - FileInputStream 提供了各种从文件中读取字节的方法,例如 read()、read(byte[] b) 和 read(byte[] b, int off, int len)。read() 方法读取单个字节,而其他两个方法将多个字节读取到字节数组中。

5. 关闭流:
   - 使用完毕后必须关闭 FileInputStream 以释放系统资源。这通常是使用“close()”方法完成的。未能关闭流可能会导致资源泄漏。

6. 例外情况:
   - 涉及文件 I/O 的操作可能会抛出检查异常,FileInputStream 也不例外。IOException 是处理文件流时需要处理的常见异常。这可以确保您的程序可以正常处理诸如找不到文件、权限问题或其他 I/O 错误等情况。

总之,FileInputStream 是一个方便的类,用于以字节方式从文件中读取原始二进制数据,使其适合需要处理文件中存储的非文本信息的场景。

示例 1:逐字节读取文件

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

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

2: 逐块读取文件

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

public class FileInputStreamExample2 {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("example.txt")) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                System.out.write(buffer, 0, bytesRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3: 使用缓冲输入流读取文件

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

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

4: 读取二进制文件

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

public class FileInputStreamExample4 {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("binaryFile.bin")) {
            int byteRead;
            while ((byteRead = fis.read()) != -1) {
                System.out.print(byteRead +
" ");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5: 使用 try-with-resources 和 Java NIO 读取文件

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class FileInputStreamExample5 {
    public static void main(String[] args) {
        Path filePath = Path.of("example.txt");
        try (FileInputStream fis = new FileInputStream(filePath.toFile())) {
            int byteRead;
            while ((byteRead = fis.read()) != -1) {
                System.out.print((char) byteRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Java 中的“FileInputStream”类用于以字节流的形式从文件中读取数据。以下是演示“FileInputStream”用法的 10 个示例:
1.使用 FileInputStream 读取文件:

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

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


2.使用缓冲区读取文件:

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

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

3.读取固定字节数:

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

public class FileInputStreamFixedBytes {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("example.txt")) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                System.out.write(buffer, 0, bytesRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


4.将文件读入字节数组

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

public class FileToByteArrayExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("example.txt")) {
            byte[] data = new byte[fis.available()];
            fis.read(data);
            System.out.println(new String(data));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5.跳过 FileInputStream 中的字节:

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

public class FileInputStreamSkipExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("example.txt")) {
            fis.skip(5);
// Skip the first 5 bytes
            int data;
            while ((data = fis.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


6.使用 try-with-resources 和 Paths:

import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileInputStreamWithPaths {
    public static void main(String[] args) {
        Path filePath = Paths.get("example.txt");
        try (FileInputStream fis = new FileInputStream(filePath.toFile())) {
            int data;
            while ((data = fis.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


7.读取二进制文件

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

public class BinaryFileReader {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("binaryfile.bin")) {
            int data;
            while ((data = fis.read()) != -1) {
                System.out.print(data +
" ");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


8.读取带字符集的文件

import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class FileInputStreamWithCharset {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("example.txt")) {
            byte[] data = fis.readAllBytes();
            System.out.println(new String(data, StandardCharsets.UTF_8));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

9.使用 FileChannel 读取文件

import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class FileChannelExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("example.txt");
             FileChannel channel = fis.getChannel()) {
            ByteBuffer buffer = ByteBuffer.allocate(1024);
            while (channel.read(buffer) != -1) {
                buffer.flip();
                while (buffer.hasRemaining()) {
                    System.out.print((char) buffer.get());
                }
                buffer.clear();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


10.使用扫描仪读取文件:

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

public class FileInputStreamWithScanner {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("example.txt");
             Scanner scanner = new Scanner(fis)) {
            while (scanner.hasNextLine()) {
                System.out.println(scanner.nextLine());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}