MyCP(课下作业,必做)

要求

编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数:
java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十进制数字)转化为二进制文件
java MyCP -xt XXX1.bin XXX2.txt 用来二进制文件把转化为文本文件(内容为十进制数字)
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息

    • 思路
      题目要求实现文件的复制过程,且能够支持两个参数:-tx和-xt;
      把内容为十进制数字的文本文件转化为二进制文件,所以只需要考虑由数字字符构成的文本文档;
      十进制数字单个数字最大是9,用二进制数字表示需要4位,所以需要把文本文件中的十进制数字的每一位都补齐为四位二进制数。

      • 代码

      import java.io.*;
      public class Mycp {
      public static void main(String args[]) {
      String choose=args[0];//获得第一个参数
      String File1=args[1];//获得第二个参数:文件名
      String File2=args[2];//获得第三个参数:文件名
      File sourceFile = new File(File1);//读取的文件
      File targetFile = new File(File2);//写入的文件
      int ReadLenth=0;
      if (choose.equals("-tx")){
      ReadLenth=1;
      }//如果参数是-tx,每次读取的长度设置为1
      else if(choose.equals("-xt")) {
      ReadLenth=4;
      }//如果参数是-xt,每次读取的长度设置为4
      else{
      System.out.println("输入参数错误!");
      System.exit(0);
      }//如果参数输入错误的话就退出程序
      char c[] =new char[ReadLenth];//定义字符数组
      try{
      Writer out = new FileWriter(targetFile);//指向目的地的输出流
      Reader in = new FileReader(sourceFile);//指向源的输入流
      int n = -1;
      while((n=in.read(c,0,ReadLenth))!=-1) {
      //当文件中还有信息时,继续读取字符到字符数组c中,n是返回的实际读取的字符的个数
      String number="";
      if(ReadLenth==1){
      number=Integer.toBinaryString((int)c[0]-48);
      //把读取到的十进制数转化为二进制数
      while(number.length()<4){
      number="0"+number;//把二进制数扩充为4位
      }
      out.write(number);//写入目标文件
      }
      else if(ReadLenth==4){
      for(int i=0;i<n;i++){
      number=number+c[i];//读取4位的二进制数
      }
      number=Integer.valueOf(number,2).toString();//二进制数转化十进制,再转为字符串形式
      out.write(number);//写入目标文件
      }
      }
      out.flush();
      out.close();
      }
      catch(IOException e) {
      System.out.println("Error "+e);
      }
      }
      }
  • 由于我个人的笔记本电脑主板短路了,短时间内无法修好,所以只能用同学的电脑测试并调试代码。目前只能提交这么多,望老师理解!!!

20175315Mycp的更多相关文章

随机推荐

  1. Binding介绍

    一.Binding的源与路径 在大多数情况下Binding的源是逻辑层的对象,但有时候为了让UI元素产生一些联动效果也会使用Binding在控件间建立关联, 下面的代码是把一个TextBox的Text ...

  2. PHP开发高可用高安全App后端

    基于thinkphp5开发的APP,涵盖阿里大于,七牛云图片上传,RestfulApi,短信验证, 需要联系我:QQ:1844912514

  3. bugku web web3

    flag就在这里快来找找吧http://123.206.87.240:8002/web3/ 点进去这个页面可以看到不断地有提示 flag就在这里 来找找吧 那就找一找哇 在source中可以找到一行注 ...

  4. matplotlib设置中文标签

    import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei']

  5. BZOJ 2730 矿场搭建

    割点 割点以外的点坍塌不影响其他人逃生,因为假设我们任取两个个非割点s建立救援站,非割点的任意点坍塌,我们都可以从割点走到一个救援出口. 所以我们只考虑割点坍塌的情况. 我们可以先找出图中所有的割点. ...

  6. 特殊计数序列——第二类斯特林(stirling)数

    计算式 \[ S(n,m)=S(n-1,m-1)+mS(n,m) \] \(S(0,0)=1,S(i,0)=0(i>0)\) 组合意义 将\(n\)个不可分辨的小球放入\(m\)个不可分辨的盒子 ...

  7. Mac 使用 OpenMP/Clang

    新建 hello.cpp 文件: #include <omp.h> #include <stdio.h> int main() { #pragma omp parallel p ...

  8. 使用apidoc生成项目文档

    [1]npm install apidoc -g 全局安装apidoc [2]apidoc -v 查看是否安装成功 [3]apidoc.json apidoc的项目级配置文件,它必须位于整个工程目录顶 ...

  9. Linux lvs-NAT模式配置详解

    本篇文档主要是记录NAT模式实现过程,以及各配置步骤的原理.“lvs三种模式工作原理”中描述了LVS的NAT.DR.TUN三种模式的工作原理. NAT模式是通过director将报文目标IP地址修改, ...

  10. git学习03 - 撤销修改&删除文件

    撤销修改:git checkout -- filename :将工作区文件回到最近一次add 或者 commit的状态 撤销修改分为三种情况: 1.未提交至暂存区 使用git checkout -- ...