Java IO——FileInputStream和FileOutputStream

注意:写代码是不要忘记加close() 和 flush()方法。

一、FileInputStream输入方法详解

FileInputStream输入流一共有3个读方法:

int	read()
从该输入流读取一个字节的数据。该方法读取的是字节但返回int型,这是为了方便直观查看。如果没有读取到任何内容,即读到了文件末尾,那么该方法会返回 -1。

int	read(byte[] b)
从该输入流读取最多 b.length个字节的数据到字节数组中
返回读入缓冲区(字节数组)的总字节数,若到达文件末尾,则返回-1

int	read(byte[] b, int off, int len)
从该输入流读取最多 len字节的数据到字节数组,从数组的off位置开始存储字节。如果len不为零,该方法将阻塞,直到某些输入可用; 否则,不会读取字节,并返回0 。
返回读入缓冲区(字节数组)的总字节数,若到达文件末尾,则返回-1

long	skip(long n)
跳过并从输入流中丢弃 n字节的数据。

二、FileOutputStream输出方法详解

FileOutputStream输出流在初始化的时候,可以指定是否覆盖现有文件内容(不指定默认覆盖现有内容)

FileOutputStream输出流一共有3个写方法:

void	write(byte[] b)
将 b.length个字节从指定的字节数组写入此文件输出流。

void	write(byte[] b, int off, int len)
将 len个字节从位于偏移量 off的指定字节数组写入此文件输出流。

void	write(int b)
将指定的一个字节写入此文件输出流。虽然参数是int类型,但是我们在传参的时候可以直接传byte类型。

示例1:

    public static void copyFileByByte(File srcFile, File desFile) throws IOException {
        if(!srcFile.exists()){
            throw new IllegalArgumentException("文件" + srcFile.getName() + "不存在");
        }
        if(!srcFile.isFile()){
            throw new IllegalArgumentException(srcFile.getName() + "不是文件");
        }
        FileInputStream fis = new FileInputStream(srcFile);
        FileOutputStream fos = new FileOutputStream(desFile);
        int c;
        while((c = fis.read()) != -1){
            fos.write(c);
        }
        fis.close();
        fos.close();
    }

示例2:

    public static void copyFileByByteArr(File srcFile, File desFile) throws IOException {
        if(!srcFile.exists()){
            throw new IllegalArgumentException("文件" + srcFile.getName() + "不存在");
        }
        if(!srcFile.isFile()){
            throw new IllegalArgumentException(srcFile.getName() + "不是文件");
        }
        byte[] bytes = new byte[1024 * 8];
        FileInputStream fis = new FileInputStream(srcFile);
        FileOutputStream fos = new FileOutputStream(desFile);
        int c;
        while((c = fis.read(bytes)) != -1){
            fos.write(bytes);
        }
        fos.flush(); // 这里最好加上 flush

        fis.close();
        fos.close();
    }

示例3:

   public static void copyFileByByteArrAndOffset(File srcFile, File desFile) throws IOException {
        if(!srcFile.exists()){
            throw new IllegalArgumentException("文件" + srcFile.getName() + "不存在");
        }
        if(!srcFile.isFile()){
            throw new IllegalArgumentException(srcFile.getName() + "不是文件");
        }
        byte[] bytes = new byte[1024 * 8];
        FileInputStream fis = new FileInputStream(srcFile);
        FileOutputStream fos = new FileOutputStream(desFile);
        int c;
        while((c = fis.read(bytes, 0 , bytes.length)) != -1){
            fos.write(bytes, 0 , bytes.length);
        }
        fos.flush(); // 这里最好加上 flush

        fis.close();
        fos.close();
    }

 

 

好的,我可以为你介绍一下如何使用 Java 编写程序实现文件拷贝。 Java 提供了非常方便的 I/O 类来处理文件读写操作。文件拷贝的基本思路是读取源文件中的数据,然后将数据写入到目标文件中。下面是一个简单的文件拷贝程序示例: ```java import java.io.*; public class FileCopy { public static void main(String[] args) throws IOException { // 源文件路径 String srcFilePath = "C:/temp/source.txt"; // 目标文件路径 String destFilePath = "C:/temp/dest.txt"; // 创建输入流和输出流 FileInputStream fis = new FileInputStream(srcFilePath); FileOutputStream fos = new FileOutputStream(destFilePath); // 定义缓冲区,每次读取 1024 个字节 byte[] buffer = new byte[1024]; int len; // 循环读取源文件中的数据,并将数据写入到目标文件中 while ((len = fis.read(buffer)) != -1) { fos.write(buffer, 0, len); } // 关闭输入流和输出流 fis.close(); fos.close(); System.out.println("文件拷贝完成!"); } } ``` 在上面的示例中,我们首先定义了源文件路径和目标文件路径。然后创建了输入流和输出流,用于读取源文件和向目标文件写入数据。我们定义了一个缓冲区,每次从输入流中读取 1024 个字节,并将这些字节写入到输出流中。最后,我们关闭输入流和输出流,并输出一条完成信息。 需要注意的是,上面的代码中使用了 try-catch 语句来捕获可能出现的 IOException 异常。这是因为在文件读写过程中可能会出现异常,比如文件不存在、文件无法读取等等。为了保证程序的健壮性,我们需要使用 try-catch 语句来处理这些异常。 希望这个简单的示例可以帮助你了解如何使用 Java 编写文件拷贝程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值