编程实现类似Linux下cp功能

Posted darklord0604

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程实现类似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()的作用,没有刷出缓冲池中的数据。

以上是关于编程实现类似Linux下cp功能的主要内容,如果未能解决你的问题,请参考以下文章

课后选做题:MyCP

Linux命令学习-cp命令

UNIX环境高级编程APUE练习4.6-实现类似cp的程序,保留文件中的空洞

Linux-c编程实现简单的cp命令

Linux下目录编程(读取创建拷贝)

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?