案例运行效果与操作
本案例实现了文件复制功能,并且定义了一个可供其它程序使用的文件复制方法copy-File().
如果目标文件存在,首先要确定它是可写的文件,并且在写入前询问用户。
如果目标是一个目录,则将源文件名作为目标文件名。
制作要点
1 file类的使用
2 FileInputStream()输入流方法的使用
3 FileOutputStrem()输出流方法的使用
步骤详解
1 利用File类查看文件属性
在复制文件之前,需要用File类进行一些测试,读取文件的各种属性,以确定一切正常。
首先定义两个文件,它们都是File类的实例:
File resourceFile=new File(resourceFileName);
File targetFile=new File(targetFileName);
确定源文件存在,并且可读
if(!resourceFile.exists())
abort("未发现源文件:"+resourceFileName);
if(!resourceFile.isFile())
abort("不能复制目录:"+resourceFileName);
if(!resourceFile.canRead())
abort("源文件:"+resourceFileName+"不是可读文件!");
如果目标是一个目录,则将源文件名作为目标文件名;
if(targetFile.isDirectory())
targetFile=new File(targetFile,resourceFile.getName());
2 应用FileInputStream()输入流方法和FileOutputStream()输出流方法,进行文件复制。
在JDK1.0中,通常是用InputStream & OutputStream这两个基类来进行读写操作的。
InputStream中的FileInputSream类似一个文件句柄,通过它来对文件进行操作,类似的,
在OutputStream中有FileOutputStream这个对象。这二者可以对文本谁的或二进制文件进行操作。
开始复制文件
resource=new FileInputStream(resourceFile);//创建输入流
target=new FileOutputStream(targetFile);//创建输出流
byte[] buffer=new byte[4096]; //每次读取4k字符
将一段字节流读到缓存中,然后将它们写出来:
while((byteNum=resource.read(buffer))!=-1)//读到文件末尾
target.write(buffer,0,byteNum);//写入
/*
* 本案例能独立实现复制文件
* 并且定义了一个可供其它程序使用的文件复制方法copyFile()
*/
import java.io.*;
public class FileCopy
{
public static void main(String[] args)
{
if(args.length!=2)//检查参数
System.err.println("使用方法:java FileCopy <源文件名> <目的文件名>");
else
{
//调用copyFile()方法,实现复制文件,并显示错误信息
try
{
copyFile(args[0],args[1]);
} catch (IOException e)
{
System.err.println(e.getMessage());
}
}
}
//静态方法copyFile()真正实现文件复制
//在复制文件之前,进行一些测试,以确定一切正常
public static void copyFile(String resourceFileName,String targetFileName)
throws IOException
{
//首先定义两个文件,它们都是File类的实例
File resourceFile=new File(resourceFileName);
File targetFile=new File(targetFileName);
//首先确定源文件存在并且是可读的文件
if(!resourceFile.exists())
abort("未发现源文件:"+resourceFileName);
if(!resourceFile.isFile())
abort("不能复制目录:"+resourceFileName);
if(!resourceFile.canRead())
abort("源文件:"+resourceFileName+"不是可读文件!");
//如果目标是一个目录,则将源文件名作为目标文件名;
if(targetFile.isDirectory())
targetFile=new File(targetFile,resourceFile.getName());
//如果目标文件存在,首先要确定它是可写的文件
//并且在写入前询问用户
//如果目标文件不存在,那么要确定该目录存在并且是可写的
if(targetFile.exists())
{
if(!targetFile.canWrite())
abort("目标文件不是可写文件:"+targetFileName);
//询问用户是否覆盖目标文件
System.out.println("是否覆盖现在的文件:"+targetFile.getName()+"?(Y/N):");
System.out.flush();
//得到用户的反馈信息
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String response=in.readLine();
//检测用户反馈的信息
//如果得到的答案是否定的,那么取消复制操作
if(!response.equals("Y") && !response.equals("y"))
abort("用户取消复制操作");
}else
{
//如果文件不存在,检查目录是否存在,该目录是否是可写的
//如果getParent()方法返回空值,说明该目录为当前目录
String parent=targetFile.getParent();//目标目录
if(parent==null)//如果是空值 ,使用当前目录
parent=System.getProperty("user.dir");
File directory=new File(parent);//将它转换成文件
if(!directory.exists())
abort("目标目录"+parent+"不存在");
if(!directory.isFile())
abort("指定的目录"+parent+"不是不目录");
if(!directory.canWrite())
abort("指定的目标目录"+parent+"不可写");
}
//开始复制文件
FileInputStream resource =null;
FileOutputStream target=null;
try
{
resource=new FileInputStream(resourceFile);//创建输入流
target=new FileOutputStream(targetFile);//创建输出流
byte[] buffer=new byte[4096];//每次读取4k字符
int byteNum;//缓存中的字节数目
//将一段字节流读到缓存中,然后将它们写出来
//循环直到文件末尾(当read()返回-1时)停止
while((byteNum=resource.read(buffer))!=-1)
//读取流直到文件末尾
target.write(buffer,0,byteNum);//写入
System.out.println("文件复制成功!");
} catch (Exception e)
{
e.printStackTrace();
}finally
{
//关闭流
if(resource!=null)
try
{
resource.close();
} catch (IOException e2)
{
e2.printStackTrace();
}
if(target!=null)
try
{
target.close();
} catch (Exception e2)
{
e2.printStackTrace();
}
}
}
public static void abort(String msg) throws IOException
{
throw new IOException("文件复制:"+msg);
}
}
分享到:
相关推荐
在Android开发中,文件复制和进度条的显示是常见的需求,尤其在移动应用中,用户可能需要将数据从一个位置移动到另一个位置,或者在后台下载文件时展示进度。`ProgressDialog`是Android SDK提供的一种对话框组件,...
Java 文件复制器是一种实用程序,用于在计算机上复制文件。在这个特定的代码示例中,我们看到一个名为 `FileCopy` 的类,该类包含了复制文件的核心逻辑。下面我们将详细探讨这个程序的关键部分以及实现文件复制所...
"文件复制过程显示进度条"这个话题就是关于如何提升用户在进行文件操作时的体验,特别是当涉及大文件复制时,进度条能给用户带来可视化的反馈,让用户了解任务的进展情况,从而增加耐心和信任感。在Windows操作系统...
文件复制算法是计算机科学中一个基础且重要的主题,特别是在数据管理、操作系统以及文件系统领域。在日常操作中,我们经常需要复制文件从一个位置到另一个位置,这背后就涉及到一系列的复制策略和技术。本文将深入...
操作系统实验报告——文件复制 在计算机科学领域,操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的核心程序,它为用户提供了与计算机交互的接口。在操作系统的学习过程中,进行实验是深入...
在VB6.0编程环境中,开发一个文件复制器程序是一个基础但实用的实践项目。这个程序的核心功能是利用内置的`FileCopy`函数来实现文件的复制操作。下面将详细介绍`FileCopy`函数以及如何在VB6.0中构建这样的程序。 `...
本文将详细讨论“文件复制”和“强制替换工具”,特别是针对那些正在被其他程序使用的文件进行替换的方法。 首先,我们要理解文件复制的基本原理。文件复制是指将一个文件的完整内容复制到另一个位置,保留原有的...
下面将详细解释如何在Android应用中将assets目录下的文件复制到手机内存。 首先,`assets`目录是Android应用中的一个特殊目录,它允许开发者存放非编译型的资源文件,这些文件在应用运行时可以通过AssetManager访问...
本项目"多文件大文件复制源码"提供了一个使用C#编程语言实现的解决方案,专注于处理大文件以及多个文件的复制,并且在复制过程中加入了进度条显示和速度计算功能,提升了用户体验。 首先,我们来看C#中大文件复制的...
标题“多文件复制工具 TeraCopy”揭示了一个高效替代Windows系统默认复制功能的软件,TeraCopy。这款工具专为优化大量文件和大文件的复制过程而设计,解决了用户在复制过程中可能遇到的各种问题,如文件冲突、错误或...
标题中的“封装CopyFileEx,实现文件复制异步,控速,获取进度”是指通过编程技术将Windows API中的CopyFileEx函数进行包装,以便在执行文件复制操作时添加额外的功能,如异步处理、速度控制以及复制进度的监控。...
"大文件复制助手"是一款高效工具,专为解决大文件快速复制的问题。它能在短短的21秒内完成424MB文件的拷贝,极大地提高了工作效率,避免了传统复制方法可能遇到的长时间等待和卡顿。 首先,我们要理解为何大文件...
在Windows操作系统中,进行可靠的文件复制处理是一项至关重要的任务,特别是在需要备份数据或者将大量文件迁移到其他位置时。为了确保文件的安全性和完整性,我们需要采用高效且稳定的复制方法。本篇将详细介绍...
在C#编程中,查找和复制文件是常见的文件操作任务,尤其在开发系统工具或进行数据迁移时。本文将深入探讨如何使用C#实现这两个功能,并提供相关代码示例。 一、查找文件 在C#中,我们可以使用`System.IO`命名空间...
【标题】"C#自己自学的文件复制程序带进度条" 涉及的知识点主要集中在C#编程语言的应用上,特别是文件操作和用户界面(UI)设计。在这个项目中,开发者创建了一个能够进行文件复制并同时显示进度条的程序。下面将...
【Hook技术监控文件复制】 Hook技术是Windows操作系统中一种强大的机制,它允许程序拦截和处理特定的系统事件或用户输入,而这些事件原本会被其他程序处理。在本场景中,我们关注的是如何利用Hook来监控文件复制...
在Java编程语言中,文件复制是一项常见的任务,用于在不同位置之间移动或备份数据。本文将详细介绍如何在Java中实现文件复制,同时考虑到输入输出异常处理,并在DOS控制台环境中运行程序。 首先,我们需要创建一个...
### 远程或本地文件复制知识点解析 #### 一、概述 本文将详细介绍一个使用C#编写的程序,该程序能够实现远程或本地文件的复制功能。通过简单的配置即可完成文件或目录的复制操作,非常适用于需要频繁进行数据同步的...
在VB(Visual Basic)编程中,创建一个带进度条的文件复制功能是一项常见的需求,它能够为用户在执行长时间操作时提供可视化的进度反馈。在本文中,我们将深入探讨如何利用VB实现这一功能。 首先,我们需要理解VB中...
"Java 文件复制(带有编码类型)" 在 Java 中,文件复制是非常常见的操作。今天,我们将讨论如何使用 Java 将文件从一个位置复制到另一个位置,并且带有编码类型。 标题:Java 文件复制(带有编码类型) 描述:...