编程实现类似Linux下cp功能

MyCP的代码实现

一、题目要求:

编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数:

  • java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十进制数字)转化为二进制文件
  • java MyCP -xt XXX1.bin XXX2.txt 用来二进制文件把转化为文本文件(内容为十进制数字)

二、设计思路

此次的代码要求实现类似Linux下cp的功能。我们需要注意的以及考虑的细节有以下几点:

  1. 源文件和目标文件分属不同的文件形式,且由命令行提供。
  2. 程序可以接受“-tx”或“-xt”参数来选择转换形式(不需要实现类似cp命令的其他参数
    3.文本文件中内容为十进制数字(意味着没有其他形式的字符
  3. 如何简单实现二进制与十进制的相互转换

1.伪代码实现

程序读取命令行输入的三个参数,参数为“-tx”或“-xt”,否则报错并终止运行。
当参数为“-tx”时,读取txt文件中的数字,转换为二进制后写入bin文件
当参数为“-xt”时,读取bin文件中的二进制数字,转换为十进制后写入txt文件

2.实现读取命令行参数

在课上,老师曾数次提醒我们注意Java语言的main方法:public static void main(String args[]) 。我们命令行中的字符会自动存储在一个名为args的字符类型数组中,且从args[0]开始存储。如图所示:


注意⚠️:这里老师提到过,java和C语言有所区分。在运行时,java会直接从文件名后的参数开始存储,而C语言则会从文件名开始存储
因此,我们只需要读取args的值,便可以实现“-tx”“-xt”值的判断。

3.实现十进制到二进制的转化

实现十进制到二进制的转化其实就是将笔头上的方法转化成程序语言,这里我选择使用除二取余法,即除k取余法,主要用于将十进制的数转化为k进制。下图摘自百度百科:

代码实现为:

 int sum;
                for (int i = number; i >= 1; i = i / 2) {
                    if (i % 2 == 0) {
                        sum = 0;
                    } else {
                        sum = 1;
                    }
                    result = sum + result;//不断让新计算的sum值置于result之前,实现余数的倒序排列。
                }
            }

4.实现二进制到十进制的转化

实现二进制到十进制的转化更加简单,通过查阅API文档,我们发现Integer.parseInt方法就可以实现这一操作。

5.读入和写入文件

事实上打从一开始我就决定将文件中的数字用数据流读成一个数字字符串,但由于相关的知识理解不透彻,教材中对数据流的介绍我一直认为有点语焉不详,在反复修改代码n次后我决定放弃数据流(或许是我的理解有本质上的错误?还要以后细细研究一番),采用缓冲流来进行文件操作,最后经过一些小调试,成功实现了文件操作。

三、代码截图及运行截图

  • 首先建立一个写有20175308的a.txt和一个空的b.bin文件

  • 运行代码后检查b.bin,内容正确

  • 将b.bin内容换成一串计算好的二进制数1001100010000100001010011 并运行代码

  • 运行程序后打开a.txt,文件中内容正确

四、编程中遇到的问题

  • 写入文件时出现文件无法写入的情况
    解决:检查代码,忽略了flush()的作用,没有刷出缓冲池中的数据。

猜你喜欢

转载自www.cnblogs.com/darklord0604/p/10771531.html
今日推荐