Java 使用FileStreams复制文件
复制文件的主要逻辑是读取与 FileInputStream 变量相关的文件,并将读取的内容写入与 FileOutputStream 变量相关的文件中。我们可以使用Java中的FileInputStream和FileOutputStream类将一个文件从一个地方复制到另一个地方。现在,在继续前进之前,让我们讨论一下程序中将要使用的基本方法。
方法1:read(): 读取一个字节的数据。存在于FileInputStream中。
返回类型: 一个整数值
语法: 其他版本
int read(byte[] bytearray
or
int read(byte[] bytearray, int offset, int length)
方法2:write(int b ):写一个字节的数据。存在于FileOutputStream中
语法
void write(byte[] bytearray)
or
void write(byte[] bytearray, int offset, int length)
实现: 我们将创建两个名为 “demo.rtf “和 “outputdemo.rtf “的文件,作为另一个没有内容的文件。下面是一个 “demo.rtf “文件的图像,作为输入图像的样本。
- 首先,我们将创建两个 File类 的对象,一个是指FileInputClass,另一个是指FileOutputStream Class。
- 现在我们将创建FileInputStream类和FileOutputStream类的对象,然后再创建变量并将空值分配给相应的数据类型。
- 传递FileInputStream和FileOutputStream对象的各自对象
- 现在使用循环不断地从一个文件中读取,并使用FileOuputStream的read()和write()方法将其写到另一个文件中。
提示: 关闭流是很好的做法,以避免内存泄漏。
例1 :
// Java Program to Illustrate File InputStream and File
// Importing required classes
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
// Main class
class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating object of File class
// Passing files from directory of local machine
File file = new File(
"/Users/mayanksolanki/Desktop/demo.rtf");
File oFile = new File(
"/Users/mayanksolanki/Desktop/outputdemo.rtf");
// Now creating object of FileInputStream
// Here they are variables
FileInputStream fis = null;
FileOutputStream fos = null;
try {
// Now we make them as objects of both classes
// and passed reference of file in directory
fis = new FileInputStream(file);
fos = new FileOutputStream(oFile);
}
// Catch block to handle exceptions
catch (FileNotFoundException e) {
// Display message if exception occurs
// File Not Found or Path is Incorrect
System.out.println(e.printStackTrace());
}
try {
// Now let us check how many bytes are available
// inside content of file
fis.available();
}
catch (Exception e) {
e.printStackTrace();
}
// Using while loop to
// write over outputdemo file
int i = 0;
while (i = fis.read() != -1) {
fos.write(i);
}
// It will execute no matter what
// to close connections which is
// always good practice
finally
{
// Closing the file connections
// For input stream
if (fis != null😉 {
fis.clsoe();
}
// For output stream
if (fos != null) {
fos.close();
}
}
}
}
输出: 同样的内容将反映在 “outputdemo.rtf “文件中,如下图 “demo.rtf “文件。
例2 :
// Java Program Illustrating Copying a src File
// to Destination
// Importing required classes
import java.io.*;
// Main class
// src2dest
class GFG {
// Main driver method
public static void main(String args[])
throws FileNotFoundException, IOException
{
// If file doesnot exist FileInputStream throws
// FileNotFoundException and read() write() throws
// IOException if I/O error occurs
FileInputStream fis = new FileInputStream(args[0]);
// Assuming that the file exists and
// need not to be checked
FileOutputStream fos
= new FileOutputStream(args[1]);
int b;
while ((b = fis.read()) != -1)
fos.write(b);
// read() method will read only next int so we used
// while loop here in order to read upto end of file
// and keep writing the read int into dest file
fis.close();
fos.close();
}
}
输出
输出说明: 必须使用命令行参数提供src文件和dest文件的名称,其中args[0]是源文件的名称,args[1]是目标文件的名称。