20175221 MyCP(课下作业,必做)

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)的区别详解

java源码Integer类toBinaryString()方法探究

java FileReader和FileWriter

猜你喜欢

转载自www.cnblogs.com/zxja/p/10778735.html
今日推荐