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();
        }
    }
}
目录
相关文章
|
6月前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
86 0
|
23天前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
49 9
|
1月前
|
Java
Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
【10月更文挑战第14天】Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
59 2
|
23天前
|
Java 开发者
JAVA高手必备:URL与URLConnection,解锁网络资源的终极秘籍!
在Java网络编程中,URL和URLConnection是两大关键技术,能够帮助开发者轻松处理网络资源。本文通过两个案例,深入解析了如何使用URL和URLConnection从网站抓取数据和发送POST请求上传数据,助力你成为真正的JAVA高手。
43 11
|
3月前
|
安全 Java 网络安全
【认知革命】JAVA网络编程新视角:重新定义URL与URLConnection,让网络资源触手可及!
【认知革命】JAVA网络编程新视角:重新定义URL与URLConnection,让网络资源触手可及!
44 2
|
4月前
|
缓存 前端开发 Java
在Java项目中实现跨域资源共享(CORS)
在Java项目中实现跨域资源共享(CORS)
|
5月前
|
Java
在Java中,死锁是指两个或多个线程互相等待对方释放资源,从而导致所有线程都无法继续执行的情况。
【6月更文挑战第24天】在Java并发中,死锁是多线程互相等待资源导致的僵局。避免死锁的关键策略包括:防止锁嵌套,设定固定的加锁顺序,使用`tryLock`带超时,避免无限等待,减少锁的持有时间,利用高级同步工具如`java.util.concurrent`,以及实施死锁检测和恢复机制。通过这些方法,可以提升程序的并发安全性。
43 1
|
4月前
|
Java Go 调度
Java演进问题之协程和线程在资源占用和切换速度上不同如何解决
Java演进问题之协程和线程在资源占用和切换速度上不同如何解决
|
4月前
|
Java Docker 容器
Java演进问题之Java的资源占用如何解决
Java演进问题之Java的资源占用如何解决
|
5月前
|
Java
死锁是线程间争夺资源造成的无限等待现象,Java示例展示了两个线程各自持有资源并等待对方释放,导致死锁。`
【6月更文挑战第20天】死锁是线程间争夺资源造成的无限等待现象,Java示例展示了两个线程各自持有资源并等待对方释放,导致死锁。`volatile`保证变量的可见性和部分原子性,确保多线程环境中值的即时更新。与`synchronized`相比,`volatile`作用于单个变量,不保证原子操作,同步范围有限,但开销较小。`synchronized`提供更全面的内存语义,保证原子性和可见性,适用于复杂并发控制。
42 3
下一篇
无影云桌面