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。

八、运行结果截图



九、参考资料

学号20175313 《实现Linux下cp XXX1 XXX2的功能(一)》第九周的更多相关文章

  1. 学号20175313 《实现Linux下cp XXX1 XXX2的功能(二)》第九周

    目录 MyCP2 一.题目要求 二.题目理解 三.需求分析 四.设计思路 五.伪代码分析 六.代码链接 七.代码实现过程中遇到的问题 八.运行结果截图 九.心得体会 十.参考资料 MyCP2 一.题目 ...

  2. 补交 20155202 蓝墨云班课 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能

    蓝墨云班课 编写MyCP.java 要求: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX ...

  3. 《Linux下cp XXX1 XXX2的功能》的实现

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

  4. 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能

    题目:编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能 要求:MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十 ...

  5. 20175303 Mycp实现Linux下cp xxx1 xxx2的功能

    20175303 Mycp实现Linux下cp xxx1 xxx2的功能 一.题目要求 编写MyCP2.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP2支持两个参数: ja ...

  6. 编程实现类似Linux下cp功能

    MyCP的代码实现 一.题目要求: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bi ...

  7. 学号20175313 《实现Linux下od -tx -tc XXX的功能》第九周

    目录 MyOD 一.题目要求 二.题目理解 三.需求分析 四.设计思路 五.代码链接 六.代码实现过程中遇到的问题 七.运行结果截图 八.参考资料 MyOD 一.题目要求 编写MyOD.java 用j ...

  8. 学号20175313 《实现Linux下Sort -t : -k 2功能》第十二周

    目录 一.题目要求 二.题目理解 三.设计思路 四.代码实现 五.代码链接 六.运行结果截图 七.参考资料 一.题目要求 实现Linux下Sort -t : -k 2的功能 二.题目理解 -t 分隔符 ...

  9. linux下cp覆盖原so文件时引起的段错误原因确定

    原创作品,转载请注明出处http://www.cnblogs.com/leo0000/p/5694416.html 最近因为一个很有意思的段错误学习了一些新的东西. 当时现象是这样的,程序正在运行,系 ...

随机推荐

  1. HTTP Status 500 - java.lang.reflect.InvocationTargetException

    type Exception report message java.lang.reflect.InvocationTargetException description The server enc ...

  2. RPC原理及实现

    一.什么是RPC RPC 的全称是 Remote Procedure Call 是一种进程间通信方式.它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个 ...

  3. python实现FTP程序

    python实现FTP程序 程序源码 上传功能 查看文件 cd功能 创建目录 程序源码 目录结构 服务端 主程序 import optparse import socketserver import ...

  4. XOR UVALive - 8512 -区间线性基合并

    UVALive - 8512 题意 :给出一个包含n个元素的数组A以及一个k,接下来进行q次询问,每次询问给出 l 和 r , 要你求出从A[l] , A[l+1] , A[l + 2],...,A[ ...

  5. 通过 ContentResolver 读取联系人信息

    1.首先动态获取 读取联系人信息权限    <1>配置文件中声明对应权限 ) } ] == PackageManager.PERMISSION_GRANTED) { readContact ...

  6. PostgreSQL自学笔记:5 数据类型和运算符

    5 数据类型和运算符 5.1 PostgreSQL 数据类型介绍 5.1.1 整数类型 整型类型 字节 取值范围 smallint 2字节 -2^15 ~ 2^15 int integer 4字节 - ...

  7. git使用习惯

    1.每早一更新,提交前更新 git pull -u origin master: master(master为分支名称) 2.每晚一提交: git add . (注:别忘记后面的.此操作是把文件夹下面 ...

  8. eclipse 中 导入git项目无法导入的问题

    研发在git上打了一个分支,需要重新导入分支项目.此时发现与之前相同模式导入失败,不起作用. 解决: 需要在Git Repositories中对应项目下找到.project 文件并进行修改,修改项目名 ...

  9. CSS入门介绍(二)CSS选择器

    css选择器 什么是选择器? 选择器是你构造好网页的结构,需要给这些结构赋予样式,这时候就需要用到选择器,利用选择器将元素与样式一一对应:两者的对应关系可以是一对一,一对多,多对一. 选择器的分类: ...

  10. BOM 浏览器对象模型_当前窗口的浏览历史 history 对象

    当前窗口的浏览历史 window.history 对象 保存了当前窗口访问过的所有页面网址 由于安全原因,浏览器不允许脚本读取这些地址,但是允许在地址之间导航 history.back() 相当于 h ...