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