案例运行效果与操作
本案例实现了文件复制功能,并且定义了一个可供其它程序使用的文件复制方法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);
}
}
分享到:
相关推荐
文件复制算法文件复制算法文件复制算法 文件复制算法文件复制算法文件复制算法
狂龙文件复制工具是一款专业的文件复制工具软件。软件可以根据用户的需求将桌面文件自动备份到选好的其它盘符中,再根据自动备份频率进行每天或每月备份等。其关键在于可转换成中间件使用,并通过狂龙中间件能够帮助...
1)在FileCopy类中,建立copy方法,实现文件复制的内容; 2)程序中需要考虑输入输出异常处理; 3)在dos控制台窗口环境下,通过命令行参数运行程序,如: Java FileCopy test1.txt test2.txt
大漠驼铃快速文件复制是大漠驼铃软件工作室开发的快速文件复制工具,方便在多个路径中复制文件到一个指定的文件夹中,只要选择好保存文件的位置,然后将需要复制的文件拖入中间的文件列表框中。软件自动进行复制,不...
实现文件的复制 及 进度条的显示 progressdialog
python 剪贴板 文件复制 相关操作代码
文件复制,具体都是递归一下,没什么难点,大家参考参考。。。。。。。。。。。
文件复制器程序(VB6.0源代码编写)利用FileCopy函数复制文件‘CommonDialog1.Filter
实验课linux下实现文件复制
VB 带进度条的文件复制 VB 带进度条的文件复制
C# winfrom 大文件复制 C# winfrom 大文件复制 文件复制
文件复制、强制替换工具(正在使用的程序也可替换)
C#大文件复制,单文件进度条,总进度条,还有速度计算。
一个简单的基于java实现的文件复制器,分享给大家学习
既然下载文件时我们会选择迅雷、IDM这种专业的软件进行加速优化,那么对于文件复制/移动我们为什么就不能使用更加强大优秀的辅助增强软件呢?ExtremeCopy (极限复制) 正是一款非常优秀实用的高效率文件复制/移动的...
还在用windows自带的复制、粘贴功能吗?在同时复制多个文件的时候,遇到无法复制的情况怎么办,是不是又得重新复制剩下的部分?很实用的文件复制工具,会自动跳过无法复制的文件,使得文件复制更便捷。
java文件复制,使用java语言开发的,效果如windows 的复制和粘贴效果。
利用Hook技术监控文件复制 当有文件被复制时候会弹出对话框
Java实现多线的文件复制(界面)。 可以选择复制文件的路径,和复制到某处的路径。可以选择线程数量。
C#自己自学的文件复制程序带进度条,好不容易码出来的,初学者真是难