Java类中FileInputStream和FileOutputStream的用途是什么?

What is the use of FileInputStream and FileOutputStream in classes in Java?

Java提供I / O流以读取和写入数据,其中,流表示输入源或输出目标,它可以是文件,I / O设备,其他程序等。

有两种类型的流可用-

  • InputStream这用于从源读取(顺序)数据。
  • OutputStream?这用于将数据写入目标。

FileInputStream

此类从特定文件中读取数据(逐字节)。它通常用于读取带有原始字节(例如图像)的文件的内容。

要使用此类读取文件的内容-

  • 首先,您需要通过传递String变量或File对象来实例化此类,该变量或File对象表示要读取的文件的路径。
1
2
3
4
FileInputStream inputStream = new FileInputStream("file_path");
or,
File file = new File("file_path");
FileInputStream inputStream = new FileInputStream(file);
  • 然后使用read()方法的两个变体之一读取指定文件的内容?

    • int read()吗?这只是从当前InputStream中读取数据,然后逐字节返回读取的数据(以整数格式)。

      如果到达文件末尾,则此方法返回-1。

    • int read(byte [] b)吗?此方法接受字节数组作为参数,并将当前InputStream的内容读取到给定数组

      此方法返回一个表示字节总数的整数,如果到达文件末尾,则返回-1。

    • int read(byte [] b,int off,int len)吗?此方法接受一个字节数组,其偏移量(int)和其长度(int)作为参数,并将当前InputStream的内容读取到给定的数组。
    • 此方法返回一个表示字节总数的整数,如果到达文件末尾,则返回-1。

假设我们在目录D:/ images中有以下图像

以下程序使用FileInputStream读取上图的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamExample {
 public static void main(String args[]) throws IOException {
   //Creating a File object
   File file = new File("D:/images/javafx.jpg");
   //Creating a FileInputStream object
   FileInputStream inputStream = new FileInputStream(file);
   //Creating a byte array
   byte bytes[] = new byte[(int) file.length()];
   //Reading data into the byte array
   int numOfBytes = inputStream.read(bytes);
   System.out.println("Data copied successfully...");
 }
}

输出量

1
Data copied successfully...

FileOutputStream

这会将数据写入特定文件或文件描述符(逐字节)。它通常用于用原始字节(例如图像)写入文件的内容。

要使用此类写入文件的内容-

  • 首先,您需要通过传递String变量或File对象来实例化此类,该变量或File对象表示要读取的文件的路径。
1
2
3
4
FileOutputStream outputStream = new FileOutputStream("file_path");
or,
File file = new File("file_path");
FileOutputStream outputStream = new FileOutputStream (file);

您还可以通过传递FileDescriptor对象来实例化FileOutputStream类。

1
2
FileDescriptor descriptor = new FileDescriptor();
FileOutputStream outputStream = new FileOutputStream(descriptor);
  • 然后使用write()方法的两种变体之一将数据写入指定的文件吗?

    • int write(int b)?此方法接受一个字节并将其写入当前OutputStream。
    • int write(byte [] b)吗?此方法接受一个字节数组作为参数,并将其写入数据到当前OutputStream。
    • int write(byte [] b,int off,int len)吗?此方法接受字节数组,其偏移量(int)和其长度(int)作为参数,并将其内容写入当前OutputStream。

假设我们在目录D:/ images中有以下图像

以下程序读取上述图像的内容,并使用FileOutputStream类将其写回到另一个文件中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileInputStreamExample {
 public static void main(String args[]) throws IOException {
   //Creating a File object
   File file = new File("D:/images/javafx.jpg");
   //Creating a FileInputStream object
   FileInputStream inputStream = new FileInputStream(file);
   //Creating a byte array
   byte bytes[] = new byte[(int) file.length()];
   //Reading data into the byte array
   int numOfBytes = inputStream.read(bytes);
   System.out.println("Data copied successfully...");
   //Creating a FileInputStream object
   FileOutputStream outputStream = new FileOutputStream("D:/images/output.jpg");
   //Writing the contents of the Output Stream to a file
   outputStream.write(bytes);
   System.out.println("Data written successfully...");
 }
}

输出量

1
2
Data copied successfully...
Data written successfully...

如果您验证给定的路径,则可以观察到生成的图像为-