MyCP(课下作业,必做)
任务详情
- 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数:
- - java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十进制数字)转化为二进制文件 - java MyCP -xt XXX1.bin XXX2.txt 用来二进制文件把转化为文本文件(内容为十进制数字)
- 提交测试代码和运行结果截图,加上学号水印,提交码云代码链接。 需要提交博客和答辩
设计思路
-
刚看题目时,理解错了题目的意思,以为是要把一个二进制文件先转换成序列,再输出对应的十进制,最后把序列转换成文件。后来和同学讨论才发现,自己没仔细看题,理解错了方向。
- 由于太久没使用Linux的操作指令,于是使用 man , cp --help 来了解对应功能
-
我大概构思了一下,要完成这个实验可能会遇到的一些难点:
- 如何完成二进制与十进制数字的互相转换
- 在txt中转化完的数据,怎样写入另一个文件
-
针对这几个问题,我去查阅了相关资料
-
十进制转二进制:
-
二进制转十进制
-
文件的写入和读取
-
代码如下
-
1 import java.io.*; 2 import java.util.Scanner; 3 public class MyCP { 4 public static void main(String[] args) throws IOException { 5 //输入十进制文本 6 Scanner scan=new Scanner(System.in); 7 String str=scan.nextLine(); 8 String[]ch=str.split(" "); 9 //调用tx方法把文本文件转化为二进制文件 10 if(ch[2].equals("-tx")){ 11 FileReader reader = new FileReader("/home/zxj/twoweek/MyCP/testorigin.txt"); 12 FileWriter writer = new FileWriter("/home/zxj/twoweek/MyCP/testchange.bin"); 13 tx(reader, writer); 14 } 15 //用xt方法把二进制文件把转化为文本文件 16 if(ch[2].equals("-xt")){ 17 FileReader reader = new FileReader("/home/zxj/twoweek/MyCP/testchange.bin"); 18 FileWriter writer = new FileWriter("/home/zxj/twoweek/MyCP/testchange2.txt"); 19 xt(reader, writer); 20 } 21 } 22 public static void tx(FileReader reader, FileWriter writer) { 23 try (FileReader In = reader; FileWriter Out = writer) { 24 char[] number = new char[1]; 25 while((In.read(number))!=-1) {//FileReader的read()方法获取对应的十进制数字 26 int number1=(int)number[0]; 27 String result=""; 28 String totwo=Integer.toBinaryString(number1);//调用Integer.toBinaryString将十进制转为二进制 29 for(int i=0;i<8;i++){//返回一个二进制的无符号整数 30 if(i<(8-totwo.length())) { 31 result = result+'0'; 32 } 33 } 34 result=result+totwo; 35 Out.write(result, 0, 8);//FileWriter的write()方法保存得到的二进制 36 Out.write(" "); 37 } 38 }catch (IOException e) { 39 e.printStackTrace(); 40 } 41 } 42 public static void xt(FileReader reader, FileWriter writer) { 43 try (FileReader In = reader; FileWriter Out = writer) { 44 char[] number = new char[8]; 45 char[] ch = new char[1]; 46 while((In.read(number))!=-1) { 47 String result=""; 48 In.read();//FileReader的read()方法获取对应的8位二进制数字 49 for(int i=0;i<8;i++){ 50 result=result+number[i]; 51 } 52 int ten=Integer.valueOf(result,2);//Integer.valueOf()方法将二进制转为十进制 53 ch[0]=(char)ten; 54 Out.write(ch, 0, 1);//FileWriter的write()方法保存得到的十进制 55 } 56 }catch (IOException e) { 57 e.printStackTrace(); 58 } 59 60 } 61 62 }
结果截图
- 首先在指定路径下创建文本,并在其中输入十进制数字
- 执行 java MyCP -tx testorigin.txt testchange.bin ,生成含有对应二进制数字的bin文件
- 查看bin文件内容
- 再执行 java MyCP -xt testchange.bin testchange2.txt ,将二进制数字再转换回十进制数字,并生成文本文件
-
问题与解决方法
-
问题1:
-
生成的bin文件无法打开查看
-
问题1解决方法:
-
我点击选择程序,查找相关应用,但遗憾的是没有合适的应用可以安装来打开bin文件,我只好回到命令行进到vim编辑页面查看。
-
问题2:
- 输入命令报错找不到路径文件
-
问题2解决方法:
- 这个是自己犯傻了,执行命令之前,没有创建对应的十进制文本文件。所以只要在执行命令前,在指定路径下创建对应的十进制文本文件即可。
码云链接
参考资料
Integer.parseInt(s)与Integer.valueOf(s)的区别详解