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

一、题目要求

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

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

二、设计思路

题目要求通过命令行输入的方式输入要读入的文件和要写入的文件并能够完成十进制和二进制相互转化的功能,在完成题目前我思考了如下几个问题:

1、如何完成十进制和二进制之间的转换?
  • 十进制转化为二进制非常容易,如果不知道简单方法或命令我们可以通过最原始的方法——将十进制数模2取余数,将得到的二进制结果用字符串格式输出即可。这里需要注意的是的得到的二进制表示也就是模2的结果一定要逆序排列,否则得到的结果和十进制是不符的(开始写代码的时候忽略了这个问题)
  • 二进制数如何转化为十进制数呢?最初的想法是将字符串存放在字符数组中,对数组进行遍历,通过数组下标和数组中存放的内容与2进行指数运算得到十进制数。但最后放弃了这个想法,这样运算起来实在是过于麻烦,并且因为二进制文件中的内容(即二进制数字的位数)不确定,因此数组空间的大小也无法确定。在查找资料中发现在可以通过Integer.parseInt 方法实现这一目的

2、如何完成从指定格式文件内容运算后写入到另一文件中?
  • 在还没有开始写代码前思考过这个问题,按照书上第十章的内容,都是在创建文件时就给出了文件的名字,例如File f = new File("hello.txt") 但本题要求是从命令行输入文件的名字,并且可以进行不同功能的进制转换,因此在程序中就不可能规定具体的文件名,那么应该如何确定文件名呢?
  • 首先按照题目的要求分别在src目录下建立了wangzihong.txtwangzihong.bin 文件,通过之前的学习我们已经知道主类中main方法的参数args[]是可以储存从命令行中传入的参数的,因此我们可以把从命令行输入的文件名当做是字符类型的变量,在建立文件时以字符串的名字建立,这样就可以控制从命令行传入文件的名字了
3、选择什么流读取文件

书上第十章中介绍了很多读取文件的流,内容比较多,涉及到的方法比较广泛但用起来的同时也比较容易懵,开始时并不知道具体应该使用哪种方法,在思考十进制和二进制转换时有想过用字符数组的方法,因此选择了字符数组输入输出流,同时选择了缓冲流因为缓冲流的源和目的地分别是字符输入和输出流

4、如何控制是十进制转化为二进制还是二进制转化为十进制

这个问题相对就比较简单了,因为控制命令是在命令行输入的,并且只有-tx-xt两种,因此只需要在程序中调用equals方法进行比较即可

三、代码实现

伪代码
命令行读入三个参数:第一个ch代表转化的格式,第二个s1代表要读取的源文件,第三个s2代表要写入的目标文件
参数为“-tx”从txt文件中读取十进制数,转化为二进制后写入bin文件中
参数为“-xt”从bin文件中读取二进制数,转化为十进制后写入txt文件中
产品代码
import java.io.*;
public class MyCP {   
public static void main(String[] args) {       
String ch = args[0];       
String s1 = args[1];       
String s2 = args[2];       
File fromfile = new File(s1);       
File tofile = new File(s2);       
String result = "";       
try {           
FileReader in = new FileReader(fromfile);           
BufferedReader infile = new BufferedReader(in);           
FileWriter out = new FileWriter(tofile);           
BufferedWriter outfile = new BufferedWriter(out);           
String number = infile.readLine();           
if(ch.equals("-tx")) {               
int n;               
int number1 = Integer.parseInt(number);               
for(int i=number1;i>0;i=i/2) {                   
if(i%2==0)                       
n = 0;                   
else                       
n = 1;                   
result = n + result;               
}           
}           
else if(ch.equals("-xt")) {               
int number1 = Integer.parseInt(number,2);               
result = String.valueOf(number1);           
}           
outfile.write(result);           
outfile.flush();           
outfile.close();           
out.close();       
}       
catch(IOException e) {           
System.out.println("Error"+e);       
}   
}
}

四、运行结果截图

五、遇到的问题

  • 问题1:在用文件创建对象时出现了错误信息

  • 解决办法:查看了教材上有关字符数组输入输出流和缓冲流发现没有使用try-catch抛出可能出现的错误信息
  • 问题2:在将十进制得到的二进制数据转换回去后发现数字和原来不一样

  • 解决方法:在检查代码后发现二进制的运算结果需要从后之前保留,应该将每次得到的n放在字符串result之前

六、代码托管

七、参考资料

如何将二进制转化为十进制

《Linux下cp XXX1 XXX2的功能》的实现的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. Linux下实现流水灯等功能的LED驱动代码及测试实例

    驱动代码: #include <linux/errno.h> #include <linux/kernel.h> #include <linux/module.h> ...

随机推荐

  1. Dynamics 365中极特殊语言的文字搜索结果异常

    微软动态CRM专家罗勇 ,回复316或者20190314可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 有些比较少见的问题, ...

  2. Util6 MIS2.0 (优六信息化管理系统框架)

    Util6 MIS一套基于ASP.NET MVC5 + Layui 开发的通用信息化管理系统快速开发框架 系统操作界面简洁, 项目结构清晰,功能模块化设计,支撑框架轻量高效,代码层级分离,注释完整,可 ...

  3. 软件工程实践-WC项目之C实现

    1.Github项目地址 https://github.com/ShadowEvan/homework 基本功能 -c 统计文件字符数(实现) -w 统计文件词数(实现) -l  统计文件行数(实现) ...

  4. 好代码是管出来的——使用GitHub

    前面的文章介绍了Git的基本概念和用法,本文则是基于GitHub的一个实践介绍,主要内容有: GitHub简介 个人与组织 仓库的创建与维护 Fork与pull request 小结 GitHub简介 ...

  5. 安装Docker时错误提示 "could not change group /var/run/docker.sock to docker: group docker not found"的解决方案

    安装Dock服务,主要命令是  yum install docker. 但是在启动的时候报错:warning msg="could not change group /var/run/doc ...

  6. SQL SERVER 2012 AlwaysOn - 操作系统层面 01

    搭建 AlwaysOn 是件非常繁琐的工作,需要从两方面考虑,操作系统层面和数据库层面,AlwaysOn 非常依赖于操作系统,域控,群集,节点等概念: DBA 不但要熟悉数据库也要熟悉操作系统的一些概 ...

  7. python 验证码识别库pytesseract的使用

    笔者环境 centos7 python3 pytesseract只是tesseract-ocr的一种实现接口.所以要先安装tesseract-ocr(大名鼎鼎的开源的OCR识别引擎). 依赖安装 yu ...

  8. MacBook Pro 安装win7 64 成功安装过程总结

    安装对象: MacBook Pro (13 英寸, 2010 年中) 中安装win7 64位操作系统(原版安装非Ghost),且只保留win7系统即可. 场景还原: 拿到笔记本时,笔记本中已无Mac ...

  9. centos7 永久添加静态路由

    查看路由表 ip route show|column -t route -n 永久添加路由 vim /etc/sysconfig/network-scripts/route-ens224 via 17 ...

  10. 安利一下workflowy和Dynalist

    最近有比较幕布这款笔记记录软件,很是喜欢那种可以记录笔记的方式,不过我还追溯了一下这种笔记模式,发现了workflowy和Dynalist这两款风格一样的软件.大家可以自行注册试试.其中Dynalis ...