《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. python的学习笔记01_6练习

    # 一.[用户登陆程序]# 基础需求:# 让用户输入用户名密码# 认证成功后显示欢迎信息# 输错三次后退出程序 count = 0 name = "cheng" password ...

  2. Android Studio教程07-Fragment的使用

    目录 1. Fragment是什么 1.1. 设计原理和实例 2. 创建fragment 2.1. fragment的生命周期 2.2 添加用户界面:融入到Activity中 3. 管理fragmen ...

  3. 【Spring Cloud笔记】 断路器-hystrix

    在微服务架构中,一个微服务的超时失败可能导致瀑布式连锁反映,Spring Cloud Netflix 的断路器Hystrix通过自主反馈,防止了这种情况发生.下面介绍简单的断路器使用方法. [step ...

  4. js用canvans 实现简单的粒子运动

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  5. Git常用命令使用大全

    1.查看.添加.提交.删除.找回,重置修改文件 git help <command> # 显示command的help git show # 显示某次提交的内容 git show $id ...

  6. 24G的SSD有什么用

    有台12G内存,带24G的SSD的笔记本,系统自带WINDOWS8,最近感觉很慢,就动手把1T的硬盘升级到512的SSD. BIOS里面明明看到24G的SSD,Windows里面就消失了(应该是坏掉了 ...

  7. java网络爬虫基础学习(四)

    jsoup的使用 jsoup介绍 jsoup是一款Java的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,css以及类似于Jquery的操作方 ...

  8. Linux新手随手笔记1.2

    重定向 输入重定向:将命令输出结果写入一个文件或将一个文件内容导回到命令里面的这个过程叫做重定向 :标准(>) 输出重定向   :覆盖写入清空写入(>)/追加写入(>>) :错 ...

  9. Docker 容器安装及常用基础命令

    为什么用docker 作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势. Docker 在如下几个方面具有较大的优势: 更快速的交付和部署 Docker在整个开发周期都可以 ...

  10. ansible roles

    roles 特点 目录结构清晰 重复调用相同的任务 目录结构相同 web - tasks - install.yml - copfile.yml - start.yml -  main.yml - t ...