文件拷贝的实现

文件拷贝相当于:

读取源文件-->写入目的地

结合了读取文件跟写入文件

所以,拷贝文件的步骤如下:

1. 建立联系:建立程序与源文件、目的的的联系。

2. 选择流:选择了两个流,输入跟输出。如:FileInputStream/FileOutputStream

3. 操作:对源文件进行读取,对目的地进行写入

如:程序中的一小段代码、

while(-1!=(len=输入流.read(byte[] b))){

输出流.write(b,0,len);

}

输出流.flush();

//关闭流....省略

4. 释放:关闭流;

源代码:

未封装前:

//建立联系

 1 File src=new File("f:/a.txt");
 2         File dest=new File("f:/b.txt");
 3         //选择流
 4         InputStream is=null;
 5         OutputStream os=null;
 6         try {
 7             is=new FileInputStream(src);
 8             os=new FileOutputStream(dest);
 9             //操作
10             byte[] b=new byte[1024];
11             int len=0;//实际读取长度
12             while(-1!=(len=is.read(b))){
13                 os.write(b, 0, len);//建议使用这个write(byte[] b, int off ,int len);
14                 /*因为,有可能在最后一次读取的时候,b数组的值是没有装满的(1024个),所以建议使用这个方法。避免返
15                   回一些多余的空格、*/
16             }
17             os.flush();//强制刷新
18         } catch (FileNotFoundException e) {
19             System.out.println("文件找不到");
20         } catch (IOException e) {
21             System.out.println("读取失败");
22             e.printStackTrace();
23         }finally{
24             try {
25                 if(null!=is){
26                     is.close();
27                 }
28                 if(null!=os){
29                     os.close();
30                 }
31             } catch (IOException e) {
32                 System.out.println("关闭流失败");
33             }
34         }

封装后:

 1  public void copyFile(String srcPath,String destPath){
 2         //建立联系
 3         File src=new File(srcPath);
 4         File dest=new File(destPath);
 5         copyFile(src, dest);
 6     }
 7     public void copyFile(File src,File dest){
 8         //选择流
 9         InputStream is=null;
10         OutputStream os=null;
11         try {
12             is=new FileInputStream(src);
13             os=new FileOutputStream(dest);
14             //操作
15             byte[] b=new byte[1024];
16             int len=0;
17             while(-1!=(len=is.read(b))){
18                 os.write(b, 0, len);
19             }
20             os.flush();//强制刷新
21         } catch (FileNotFoundException e) {
22             System.out.println("文件找不到");
23         } catch (IOException e) {
24             System.out.println("读取失败");
25             e.printStackTrace();
26         }finally{
27             try {
28                 if(null!=is){
29                     is.close();
30                 }
31                 if(null!=os){
32                     os.close();
33                 }
34             } catch (IOException e) {
35                 System.out.println("关闭流失败");
36             }
37         }
38     }
时间: 2024-10-14 10:21:42

文件拷贝的实现的相关文章

文件操作ofstream,open,close,ifstream,fin,按照行来读取数据, fstream,iosin iosout,fio.seekg(),文件写入和文件读写,文件拷贝和文件

 1.ofstream,open,close 写入文件 #include<iostream> #include<fstream> using namespace std; //通过ofstream的方式实现写入文件 open,close void main() { ofstream fout;  //ofstream输出文件 fout.open("E:\\1.txt");//打开文件 fout << "1234abcdef";

【Java】利用文件输入输出流完成把一个文件夹内的所有文件拷贝的另一的文件夹的操作

一.基本目标 使用Java完成如下的操作: 把一个文件夹内的所有文件拷贝的另一的文件夹,例如,在F盘中有a与b两个文件夹: f:/a里面有一堆文件,运行Java程序之后就会全部复制到f:/b,并且完成重命名,在所有文件之前加rename_的前缀,如果里面有文件夹,则文件夹不重命名,里面的文件进行重命名,同样在所有文件之前加rename_的前缀: 二.制作过程 1.首先主函数非常简单,就是调用了上面FileTest类中的copyFolder函数 public class FileCopy { pu

使用IO流实现对特殊文件及文件夹中文件拷贝到指定文件中

本程序可以实现将自己指定的文件类型的文件拷贝到自己想放的文件中,比如一个文件夹中有很多文件,那么我们想把所有的TXT文件拷贝到自己指定的文件中.(靠背笔记) package com.blueZhang; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcept

apk安装时把程序附带文件拷贝到手机指定目录下

项目已搞定,今天把.apk文件弄到另外一台非调试手机上用,发现一个问题.因为要画图,所以绘图的点的数据保存在一个.txt的文本文件中,上次直接把它用usb传到指定文件夹下的,但是明显不科学,因为用户下载了你的.apk文件,你却告诉他,还要把这个文本文件拷贝到指定的文件夹下,所以,我就要解决这个问题,就是把文本文件打包在apk文件中,安装.apk时就让创建一个程序文件夹,然后把文本文件拷贝到这个目录文件夹里,用户运行程序,就可以绘图,不用再让他拷贝一份绘图的点的坐标的数据.同理,其实我这里还有设计

vc关于文件拷贝

单个文件的拷贝 system  针对单个文件 CopyFile  针对单个文件 /** @file_extension egg: .txt .png **/ void CopyFileToDir(CString source_dir, TCHAR* dest_dir, TCHAR* file_extension) { CString source, dest; source.Format("%s*%s", source_dir, file_extension); dest.Format

文件操作ofstream,open,close,ifstream,fin,依照行来读取数据, fstream,iosin iosout,fio.seekg(),文件写入和文件读写,文件拷贝和文件

 1.ofstream,open,close 写入文件 #include<iostream> #include<fstream> using namespace std; //通过ofstream的方式实现写入文件 open,close void main() { ofstream fout;  //ofstream输出文件 fout.open("E:\\1.txt");//打开文件 fout << "1234abcdef";

Bash Shell 递归实现目录中文件拷贝

前言 今天工作中遇到了一个问题,如果将目录A中的文件拷贝到目录B中(前提目录B没有该文件),并保持文件在目录A的结构.项目重点如下: 需要在目录B中保持文件在目录A中的结构.假设A目录文件 A/test/1.txt,转移到目录B中应该是B/test/1.txt.同时还需要考虑目录B中是否存在test目录,多级目录就要考虑递归了.(还好,bash shell里写个目录递归遍历还是比较简单的.) 需要考虑A中文件是否在B中已经存在同名文件,如果存在,则不需要拷贝. 项目需求示例图如下: 实现 项目需

C# IO操作(四)大文件拷贝(文件流的使用)、文件编码

     大文件拷贝(文件流的使用).文件编码 首先说一下大文件拷贝和文件流,因为计算机的内存资源是有限的,面对几个G甚至更大的文件,需要通过程序来完成拷贝,就需要用到文件流(因为我们无法做到把文件一次性加载到内存中:事实上,内存也不允许这么干),所以在C#中出现了内存流这个东西.先看下面的内容,File类中的常用读取文件方法会将文件内容一次性全部加载到内存中: 1 string sPath = @"C:\Users\Chens-PC\Desktop\Nginx.txt"; 2 //F

C# 学习黑马.Net视频教程,大文件拷贝

设计器代码: namespace 大文件拷贝 { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源. /// </summary> /// <param name="disposing&

Java IO和Java NIO在文件拷贝上的性能差异分析 (转)

1.       在JAVA传统的IO系统中,读取磁盘文件数据的过程如下: 以FileInputStream类为例,该类有一个read(byte b[])方法,byte b[]是我们要存储读取 到用户空间的缓冲区.参看read(byte b[])方法的源码,可知,它会在内部再调用readBytes(b, 0, b.length)方法,而且readBytes(b, 0, b.length)方法是一个native方法(即本地方法),最终通过这个本地方法来发起一次系统调用,即调用系统内核的read()