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。
-
int read()吗?这只是从当前InputStream中读取数据,然后逐字节返回读取的数据(以整数格式)。
例
假设我们在目录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... |
如果您验证给定的路径,则可以观察到生成的图像为-