• 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

  • 相关阅读:
    [清华集训2016]温暖会指引我们前行——LCT+最大生成树
    BZOJ1415[Noi2005]聪聪和可可——记忆化搜索+期望dp
    NOIP2018游记
    BZOJ4832[Lydsy1704月赛]抵制克苏恩——期望DP
    BZOJ1906树上的蚂蚁&BZOJ3700发展城市——RMQ求LCA+树链的交
    BZOJ2822[AHOI2012]树屋阶梯——卡特兰数+高精度
    BZOJ4001[TJOI2015]概率论——卡特兰数
    BZOJ1805[Ioi2007]Sail船帆——线段树+贪心
    [IOI2018]排座位——线段树
    BZOJ3718[PA2014]Parking——树状数组
  • 原文地址:https://www.cnblogs.com/zxja/p/10778735.html
Copyright © 2020-2023  润新知