当前位置: 代码迷 >> 综合 >> Java IO (9) -- FileInputStream 类 FileOutputStream 类
  详细解决方案

Java IO (9) -- FileInputStream 类 FileOutputStream 类

热度:25   发布时间:2023-12-16 13:26:20.0

文章目录

    • 1. 概念
    • 2. 字段
      • 1. FileInputStream
      • 2. FileOutputStream
    • 3. 方法
      • 1. 构造器
        • 1. FileInputStream
        • 2. FileOutputStream
      • 2. 其他方法
        • 1. FileInputStream
        • 2. FileOutputStream
    • 4. 案例

1. 概念

FileInputStream和FileOutputStream分别是文件输入流和文件输出流,主要是用于读取图像,图片等原始字节流数据,如果读取的是文本数据,考虑使用字符流FileReader和FileWriter

2. 字段

1. FileInputStream

  1. private final FileDescriptor fd:文件描述符,通过文件描述符可以操作文件
  2. private final String path:文件路径,如果流对象是通过有参构造中传入文件描述符方式来创建,则path为null
  3. private FileChannel channel = null:用于读写文件的通道
  4. private final Object closeLock = new Object():关闭锁对象,将会在close()方法中调用,保证多线程调用不会发生冲突
  5. private volatile boolean closed = false:流是否关闭,volatile保证了多线程对于字段更改的可见性

2. FileOutputStream

  1. private final FileDescriptor fd:表示的是文件描述符对象
  2. private final boolean append:表示的是现写入的数据是否覆盖文件中数据
  3. private FileChannel channel:表示的是读写文件的通道
  4. private final String path:文件的路径,如果是以文件描述符方法创建的输出流,path为null
  5. private final Object closeLock = new Object():关闭锁对象,将会在close()方法中调用,保证多线程调用不会发生冲突
  6. private volatile boolean closed = false:流是否关闭,volatile保证了多线程对于字段更改的可见性

3. 方法

1. 构造器

1. FileInputStream

  1. public FileInputStream(String name):通过关联到实际文件的方式创建FileInputStream,文件通过文件系统中的路径名name指定
  2. public FileInputStream(File file) :通过关联到实际文件的方式创建FileInputStream,文件通过文件系统中File对象来指定
  3. public FileInputStream(FileDescriptor fdObj):通过文件描述符的方式创建FileInputStream,文件描述符可以关联到对应文件

2. FileOutputStream

  1. public FileOutputStream(String name):通过关联到实际文件的方法创建FileOuputStream,文件是通过文件路径来指定
  2. public FileOutputStream(String name, boolean append):表示的是否覆盖已存在文件.true表示将写入的数据追到文件的尾部
  3. public FileOutputStream(File file):通过关联到实际文件的方法创建FileOuputStream.文件是通过文件对象来指定
  4. public FileOutputStream(File file, boolean append):表示的是否覆盖已存在文件.true表示将写入的数据追到文件的尾部
  5. public FileOutputStream(FileDescriptor fdObj):通过关联文件描述符来创建FileOutputStream,文件描述符关联到文件

2. 其他方法

1. FileInputStream

  1. public int read():从输入流中读取一个字节
  2. public int read(byte b[]):从输入流中读取最多b.length个字节到字节数组b中
  3. public int read(byte b[], int off, int len):从输入流中最多读取len个字节到字节数组b中off位置开始
  4. public long skip(long n):跳过n个字节,实际跳过的字节可能小于n(剩余字节小于n的情况)
  5. public int available():从输入流无阻塞地可读取的字节数
  6. public final FileDescriptor getFD():返回与流关联的文件描述符FileDescriptor对象
  7. public FileChannel getChannel():返回读取文件的通道,如果为null的情况下,会创建一个新的通道
  8. protected void finalize():确保没有引用文件的情况下调用close()方法
  9. public void close():关闭输入流,并且释放与此流有关的所有资源

2. FileOutputStream

  1. public void write(int b) :将单个字节写到输出流中
  2. public void write(byte b[]):将字节数组b写到输出流中
  3. public void write(byte b[], int off, int len) :将字节数组b的off位置开始,len个字节写到输出流中
  4. public void close() :关闭输出流,释放关联的所有的资源
  5. public final FileDescriptor getFD():返回与流关联的文件描述符FileDescriptor对象
  6. public FileChannel getChannel():返回读取文件的通道,如果为null的情况下,会创建一个新的通道
  7. protected void finalize():确保没有引用文件的情况下调用close()方法

4. 案例

public class FileTestDemo {
    public static void main(String[] args) throws IOException{
    testFileWrite();testFileRead();}private static void testFileWrite() throws IOException{
    File file = new File("D:\\java.txt");FileOutputStream fos = new FileOutputStream(file);fos.write("helloworld".getBytes());FileDescriptor fd = fos.getFD();FileOutputStream fdfos = new FileOutputStream(fd);fdfos.write("I".getBytes());//设置append的值为true,表明不覆盖原文件,即在内容helloworld上追加内容FileOutputStream fifos = new FileOutputStream(file,true);fifos.write("12345".getBytes());fos.close();fdfos.close();fifos.close();}private static void testFileRead() throws IOException{
    FileInputStream fis = new FileInputStream(new File("D:\\java.txt"));int read = fis.read();System.out.println("读取一个字节:"+(char)read);fis.close();FileInputStream bytefis = new FileInputStream("D:\\java.txt");byte[] b = new byte[1024];bytefis.read(b);System.out.println("读取一个字节数组:"+new String(b));bytefis.close();}
}//结果
读取一个字节:h
读取一个字节数组:helloworldI12345
  相关解决方案