Java文件拷贝和释放资源

简介: Java文件拷贝和释放资源

java文件的拷贝

在工程下的src里面创建好一个文本文件(datas.txt)

我这里也是拷贝到工程下的src下

两个文本的扩展名要相同才能进行拷贝文件

import java.io.*;
//文件的拷贝
public class CopyDemo03 {
    public static void main(String[] args) {
        //进行文件的拷贝
        try {
            //定义一个源文件 InputStream
            InputStream in = new FileInputStream("chapter07/src/datas.txt");//多态写法  文件放在工程下的src里面
            //定义一个拷贝到的文件名  文件名夜要进行定义
            OutputStream out = new FileOutputStream("chapter07/src/data01.txt");
            //定义 一个字节数组
            byte[] buffer = new byte[1024];//1KB
            //定义一个字节读取 的记录数
            int len;
            while ((len = in.read(buffer)) != -1) {
                out.write(buffer,0,len);//buffer相当于临时存储器   从0开始 到文件存储的长度(大小)
            }
      //最后要记得关闭流  不让会占用CPU内存
            in.close();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class FileDemo03 {
    public static void main(String[] args) throws Exception {
        // 创建一个字节输入流,用于读取当前目录下source文件夹中的mp3文件
        InputStream in = new FileInputStream("F:\\java\\Filetest\\javaSE\\hello.txt");
        // 创建一个文件字节输出流,用于将读取的数据写入当前目录的target文件中
        //拷贝到指定的文件下
        OutputStream out = new FileOutputStream("F:\\java\\Filetest\\test\\hello.txt");
        // 以下是用缓冲区读写文件
        // 定义一个字节数组,作为缓冲区  1KB
        byte[] buff = new byte[1024];
        // 定义一个int类型的变量len记住读取读入缓冲区的字节数
        int len;
        long begintime = System.currentTimeMillis();
        while ((len = in.read(buff)) != -1) {
            // 判断是否读到文件末尾
            //         字节数组  0  大小
            out.write(buff, 0, len);
            // 从第一个字节开始,向文件写入len个字节
        }
        long endtime = System.currentTimeMillis();
        System.out.println("拷贝文件所消耗的时间是:" + (endtime - begintime) + "毫秒");
        //关闭流
        in.close();
        out.close();
    }
}

将一中 的代码进行优化

  1. 使用try - catch -finally 释放资源
import java.io.*;
public class CopyDemo03 {
    public static void main(String[] args) {
        InputStream in = null;
        OutputStream out = null;
        //进行文件的拷贝
        try {
            //定义一个源文件 InputStream
             in = new FileInputStream("chapter07/src/datas.txt");//多态写法
            //定义一个拷贝到的文件名  文件名夜要进行定义
             out = new FileOutputStream("chapter07/src/data01.txt");
            //定义 一个字节数组
            byte[] buffer = new byte[1024];//1KB
            //定义一个字节读取 的记录数
            int len;
            while ((len = in.read(buffer)) != -1) {
                out.write(buffer, 0, len);//buffer相当于临时存储器   从0开始 到文件存储的长度(大小)
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //finally依然会执行下去  把关闭流放在finally
            //最后要记得关闭流  不让会占用CPU内存
            try {
                in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
  1. 使用try(定义流对象){ 可能出现的异常 }catch (异常类名 变量名 ) { 异常处理}
import java.io.*;
public class CopyDemo03_1 {
    public static void main(String[] args) {
        //进行文件的拷贝
        try (
                //这里只能放资源  (资源都是实现了Closeable/AutoCloseable接口的类对象)
                //用完会自动关闭流 自动调用资源对象的close方法关闭资源
                //定义一个源文件 InputStream
                InputStream in = new FileInputStream("chapter07/src/datas.txt");//多态写法
                //定义一个拷贝到的文件名  文件名夜要进行定义
                OutputStream out = new FileOutputStream("chapter07/src/data01.txt");
        ) {
            //定义 一个字节数组
            byte[] buffer = new byte[1024];//1KB
            //定义一个字节读取 的记录数
            int len;
            while ((len = in.read(buffer)) != -1) {
                out.write(buffer, 0, len);//buffer相当于临时存储器   从0开始 到文件存储的长度(大小)
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
目录
相关文章
|
5月前
|
存储 移动开发 Java
[java进阶]——IO流基本字节流和字符流,字符流中的缓冲流,递归实现多级文件拷贝
[java进阶]——IO流基本字节流和字符流,字符流中的缓冲流,递归实现多级文件拷贝
|
Java
Java使用FileChannel进行文件拷贝(提升拷贝效率)
FileChannel属于nio,FileChannel底层会利用操作系统的零拷贝进行优化,效率较io高。
254 0
|
安全 Java
Java语法糖 : 使用 try-with-resources 语句安全地释放资源
使用 try-with-resources 语句自动关闭资源的类都实现了AutoCloseable 接口。
196 0
Java语法糖 : 使用 try-with-resources 语句安全地释放资源
|
分布式计算 Java Hadoop
HDFSAPI编程源码-java文件拷贝
HDFSAPI编程源码-java文件拷贝
|
缓存 编解码 网络协议
【JAVA】文件拷贝方式
NIO 不止是多路复用,NIO 2 也不只是异步 IO,今天我们来看看 Java IO 体系中,其他不可忽略的部分。
201 0
文件拷贝功能java实现
文件拷贝功能java实现
|
Java Android开发
编写Java程序,使用 Java 的 I/O 流将 H:\eclipse.zip 文件拷贝至 E 盘下,重新命名为 eclipse 安装 .zip。
编写Java程序,使用 Java 的 I/O 流将 H:\eclipse.zip 文件拷贝至 E 盘下,重新命名为 eclipse 安装 .zip。
133 0
编写Java程序,使用 Java 的 I/O 流将 H:\eclipse.zip 文件拷贝至 E 盘下,重新命名为 eclipse 安装 .zip。
|
Java 程序员 数据库连接
|
NoSQL Java Redis
Java程序中如何正确的释放资源(备战2022春招或暑期实习,每天进步一点点,打卡100天,Day2)
Java程序中如何正确的释放资源(备战2022春招或暑期实习,每天进步一点点,打卡100天,Day2)
110 0
Java程序中如何正确的释放资源(备战2022春招或暑期实习,每天进步一点点,打卡100天,Day2)