java实验:面向抽象(接口)编程

实验内容

编写一个命令行拷贝文件的程序XCopy,使用命令行参数传入源文件路径及目标文件路径,程序运行命令如下:
java XCopy 源文件路径 目标文件路径
具体要求:
·运行时,要输出文件拷贝进度(百分比进度)。
·利用依赖倒置原则,使用回调的方式通知界面显示进度,不能在拷贝文件时直接输出进度,即保证拷贝的功能与程序界面分离,考虑将来程序升级成图形界面时,拷贝的功能不需要任何修改,只需要修改界面程序即可
注意:
·本程序需要编写多个类(或接口),XCopy是主类。
·此程序要用到文件读取和写入,涉及流的操作,会用到如下两个类:
FileInputStream
int available()方法返回流的长度
int read(byte[] b)方法将数据读入字节数组b中,返回实际读取的长度
FileOutputStream
write(byte[] b, int off, int len)方法,将b中内容写入流
·会用到异常处理
·输出百分比进度时需要退格,用\b
·运行XCopy命令时,如果参数数量,文件路径不合法给出提示

代码

import java.io.*;
interface CallBack
{
	void showProgress(int progress);
}
class ConsoleProgress implements CallBack
{
	public void showProgress(int progress)
	{
		System.out.print("\b\b\b\b"+progress+"%");
	}
}
class FileUtils
{
	private CallBack cb;
	public FileUtils()
	{
		
	}
	public FileUtils(CallBack cb)
	{
		this.cb=cb;
	}
	public void copy(FileInputStream in, FileOutputStream out, int bufSize) throws IOException
	{
		int total=in.available();
		int copied=0;
		byte[] buf=new byte[bufSize];
		int len=in.read(buf);
		while(len>0)
		{
			out.write(buf,0,len);
			copied+=len;
			cb.showProgress((int)(100.0*copied/total));
			len=in.read(buf);
		}
	}
}
public class XCopy {

	public static void main(String[] args)  throws IOException
	{
		if(args.length !=2)
		{
			System.out.println("命令格式错误!");
			return;
		}
		FileInputStream fis=new FileInputStream(args[0]);
		FileOutputStream fos=new FileOutputStream(args[1]);
		CallBack cb=new ConsoleProgress();
		FileUtils fu=new FileUtils(cb);
		fu.copy(fis, fos, 1024*1024);
		fis.close();
		fos.close();

	}

}

运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值