《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. 5分钟入门LingaScript-尝鲜中文版TypeScript

    续前文转载: 中文輸進去,程式出得來,開發者發大財 -LingaScript:中文化TypeScript, 虽然其中例程使用了繁体中文语法, 但它同时也支持简体中文语法. 注: 此文中VS Code的 ...

  2. Spinner之下拉多选,监听ID后显示不同Frgment页面

    本人安卓小白,公司最近项目需要用到不同的类型的用户注册,周末下午写完记录一下. 网上找了一堆没有适合自己的(或者说我没找到),写的比较基础,欢迎大家多多指导. 老规矩,先上效果图 网上在线合成的GIF ...

  3. Android 简单统计文本文件字符数、单词数、行数Demo

    做的demo是统计文本文件的字符数.单词数.行数的,首先呢,我们必须要有一个文本文件.所以我们要么创建一个文本文件,并保存,然后再解析:要么就提前把文本文件先放到模拟器上,然后检索到文本名再进行解析. ...

  4. Vue 入门之目录结构介绍

    Vue 是一套用于构建用户界面的渐进式框架,与其它大型的页面框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合.另一方面,当 ...

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

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

  6. vue build报copy-webpack-plugin] unable to locate异常的解决方法

    ERROR in [copy-webpack-plugin] unable to locate 'J:\xxx\xxx\xxx\xxx\static' at 'J:\xxx\xxx\xxx\xxx\s ...

  7. 对Link Map File的初步认识

    什么是Link Map File Link Map File中文直译为链接映射文件,它是在Xcode生成可执行文件的同时生成的链接信息文件,用于描述可执行文件的构造部分,包括了代码段和数据段的分布情况 ...

  8. 应用wavesurfer.js绘制音频波形图小白极速上手总结

    一.简介 1.1  引   人生中第一份工作公司有语音识别业务,需要做一个web网页来整合语音引擎的标注结果和错误率等参数,并提供人工比对的语音标注功能(功能类似于TranscriberAG等),(博 ...

  9. PHP字符串函数、常量、数组排序

    PHP字符串函数.常量.数组排序 strlen() 说明:strlen(),可以统计字符串长度 用途:strlen() 常用于循环和其他函数,在确定字符串何时结束很重要时.(例如,在循环中,我们也许需 ...

  10. Kubernetes 网络排错指南

    本文介绍各种常见的网络问题以及排错方法,包括 Pod 访问异常.Service 访问异常以及网络安全策略异常等. 说到 Kubernetes 的网络,其实无非就是以下三种情况之一 Pod 访问容器外部 ...