Java之简单的文件拷贝案例
2022/2/17 17:12:20
本文主要是介绍Java之简单的文件拷贝案例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
需求分析:
- 需要实现文件的拷贝操作,那么这种拷贝就有可能拷贝各种类型的文件,所以使用字节流;
- 在进行拷贝的时候有可能需要考虑到大文件的拷贝问题;
方案设计:
- 方案一:一次性全部拷贝;
|- 如果拷贝的文件很大则此方法不可取,会导致程序崩溃
- 方案二:读取一部分输出一部分;
核心的操作:
|- InputStream: public int read(byte[] b) throws IOException; |- OutputStream: public void write(byte[] b,int off,int len) throws IOException;
一个简单的文件拷贝操作:
import java.io.*; class FileUntil { // 定义一个文件操作的工具类 private File srcFile; // 源文件路径 private File desFile; // 目标文件路径 public FileUntil(File srcFile,File desFile){ this.srcFile = srcFile; this.desFile = desFile; } // 文件的拷贝方法 public boolean copy() throws IOException { if (!this.srcFile.exists()){ System.out.println("源文件不存在!!"); return false; } if (!this.desFile.getParentFile().exists()){ // 如果目录不存在 this.desFile.getParentFile().mkdirs(); // 创建父目录 } byte[] data = new byte[1024]; // 开辟拷贝的缓冲区 InputStream input = null; OutputStream output = null; try { // 创建字节流对象 input = new FileInputStream(this.srcFile); output = new FileOutputStream(this.desFile); // 获取文件长度 int len = 0; // 1.读取数据到数组之中,随后返回读取的个数,len = input.read(data) // 2.判断个数是否是 -1,如果不是则进行写入,len = input.read(data) != -1 while ((len = input.read(data)) != -1){ // 拷贝的内容都在data数组里面 output.write(data,0,len); } return true; }catch (IOException e){ e.printStackTrace(); }finally { if (input != null){ input.close(); } if (output != null){ output.close(); } } return false; } } public class MAIN { public static void main(String[] args){ long start = System.currentTimeMillis(); File src= new File("D:" + File.separator + "Demo_2_15" + File.separator + "Writer.txt"); File des= new File("D:" + File.separator + "Demo_2_15" + File.separator + "Copy.txt"); FileUntil fu = new FileUntil(src,des); try { fu.copy(); } catch (IOException e) { e.printStackTrace(); } long end = System.currentTimeMillis(); System.out.println("拷贝完成、用时:" + (end - start) + "ms"); } }
以上属于文件拷贝最原始的实现方式,从JDK1.9开始InputStream和Reader类中都追加有数据转存的处理操作方法:
InputStream: public long transferTo(OutputStream out) throws IOException; Reader: public long transferTo(Writer out ) throws IOException;
使用上诉转存的操作处理:
import java.io.*; class FileUntil { // 定义一个文件操作的工具类 private File srcFile; // 源文件路径 private File desFile; // 目标文件路径 public FileUntil(File srcFile,File desFile){ this.srcFile = srcFile; this.desFile = desFile; } // 文件的拷贝方法 public boolean copy() throws IOException { if (!this.srcFile.exists()){ System.out.println("源文件不存在!!"); return false; } if (!this.desFile.getParentFile().exists()){ // 如果目录不存在 this.desFile.getParentFile().mkdirs(); // 创建父目录 } InputStream input = null; OutputStream output = null; try { // 创建字节流对象 input = new FileInputStream(this.srcFile); output = new FileOutputStream(this.desFile); input.transferTo(output); return true; }catch (IOException e){ e.printStackTrace(); }finally { if (input != null){ input.close(); } if (output != null){ output.close(); } } return false; } } public class MAIN { public static void main(String[] args){ long start = System.currentTimeMillis(); File src= new File("D:" + File.separator + "Demo_2_15" + File.separator + "Writer.txt"); File des= new File("D:" + File.separator + "Demo_2_15" + File.separator + "Copy.txt"); FileUntil fu = new FileUntil(src,des); try { fu.copy(); } catch (IOException e) { e.printStackTrace(); } long end = System.currentTimeMillis(); System.out.println("拷贝完成、用时:" + (end - start) + "ms"); } }
这篇关于Java之简单的文件拷贝案例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
- 2024-11-24细说敏捷:敏捷四会之每日站会
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解