zoukankan      html  css  js  c++  java
  • 学号20175313 《实现Linux下cp XXX1 XXX2的功能(一)》第九周

    MyCP

    一、题目要求

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

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

    二、题目理解

    Linux下cp XXX1 XXX2的功能:在命令行输入man cp进行查看

    输入图片说明

    三、需求分析

    • 支持两个参数
      • -tx参数:将文本文件(十进制数)转化为二进制文件
      • -xt参数:将二进制文件转化为文本文件(十进制数)
    • 支持在命令行中输入三个字符串
      • 第一个字符串:文件的转化形式
      • 第二个字符串:源文件
      • 第三个字符串:目标文件
    • 将二进制数转化为十进制数
    • 将十进制数转化为二进制数

    四、设计思路

    • 问题1:如何实现在命令行中输入参数?

    教材182页Example8_14.java中略微提到一点点。

    输入图片说明

    • 解决方法:arges[]数组的使用

    • 问题2:如何实现二进制文件与文本文件的相互转化,转化的形式是什么?

    • 转化形式:

      • 二进制文件转文本文件:十进制数一位最多占用4bit,所以依次读取二进制文件的内容,每次以4bit为标准,将每4位二进制转化为一位十进制数输入到文本文件中。
      • 文本文件转二进制文件:与上面的想法类似,依次读取文本文件的内容,每次以1bit为标准,将每位十进制数转化为4位二进制数输入到二进制文件中。
    • 转化过程:

      • 二进制数转十进制数:

      输入图片说明

      • 十进制数转二进制数:

      输入图片说明

    五、伪代码分析

    • 读取命令行输入的3个参数:arges[0]代表转化形式,arges[1]代表源文件,arges[2]代表目标文件。
    • 当args[0]是“-tx”,每次读取文件名为args[1]文本文件中的1个字符,把它转为4位二进制数字写入到文件名为args[2]的二进制文件中去,直到文本文件中的所有字符读取完毕。
    • 当args[0]是“-xt”,每次读取文件名为args[1]二进制文件中的4个字符,把它转为1位十进制数写入到文件名为args[2]的十进制文件中去,直到二进制文件中的所有字符读取完毕。

    六、代码链接

    七、代码实现过程中遇到的问题

    • 问题1:读取长度readLength没有初始化。

    输入图片说明

    • 解决方法:以前用C语言习惯了变量不进行初始化,以为没有问题,看到报错后,我还是惯常的没有考虑起初的初始化问题,而是一直在找程序中为什么readLength没有被赋值的问题。找了好久感觉没有bug啊,然后就死马当作活马医的让起初的readLength=0,进行了初始化,结果不报错了。看来java对于成员变量的初始化还是严格控制的。
    • 问题2:程序编译时出现“编码GBK的不可映射字符”报错

    输入图片说明

    • 我网上找了好多解决方法都没有效果,所以这个问题到现在都没有解决,所以后面我就在虚拟机上进行的编译运行。
    • 问题3:直接将字符串与给定字符串常量进行比较,忘记应该使用equals方法,导致程序直接输出“Error”,然后退出。

    输入图片说明

    • 解决方法:调用equals方法进行字符串之间的比较

    输入图片说明

    • 问题4:将String num=""放在循环读取的外面,导致num叠加的上一次循环转化成的十进制数,产生输入溢出

    输入图片说明

    • 解决方法:将String num=""放在while循环的里面,使每一次要进行数据读取时num都是从空开始。
    • 注意:
      • 调用public static String toBinaryString(int i)方法进行十进制数转二进制数时,输入的参数的整数型,所以应该将字符型ch[0]-'0',将其字符转化为整数。
      • 调用public static int parseInt(String s,int radix)方法进行二进制转十进制数时,返回的时int,所以应该在后面加上"",使其转化为String型,后赋值给num。

    八、运行结果截图

    输入图片说明
    输入图片说明
    输入图片说明

    九、参考资料

  • 相关阅读:
    阿里云标准-Docker安全基线检查
    阿里云标准-Redis安全基线检查
    阿里云标准-Nginx安全基线检查
    python中urllib.request和requests的使用和区别
    python爬百度首页
    进行base64编码
    python基础入门 文件操作
    python面向对象编程: 搬家具案例
    在vi或vim上查找字符串
    浅析数据一致性
  • 原文地址:https://www.cnblogs.com/xiannvyeye/p/10766005.html
Copyright © 2011-2022 走看看