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. python中的线程技术

    #!/user/bin/env python # @Time :2018/7/7 11:42 # @Author :PGIDYSQ #@File :DaemonTest.py import threa ...

  2. java学习——JDK1.8接口和实现类

    Java 8 新特性:接口的静态方法和默认方法 https://blog.csdn.net/sun_promise/article/details/51220518 接口的默认方法和静态方法 http ...

  3. CentOS6.5-安装yum方法

    1.卸载原有系统中的yumrpm –qa | grep yum | xargs rpm -e --nodeps (xargs 把rpm –qa | grep yum传来的每一行信息 都用xargs后面 ...

  4. MySQL主从复制(一)

    whereis...命令的使用:

  5. 将root 当成arraylist放入数据sturts2 入门笔记

    刚启动idea 就报出错误 [-- ::,] Artifact -sturts2:war exploded: Error during artifact deployment. See server ...

  6. DAY25、面向对象总复习

    面向对象总复习:面向过程编程思想: 核心是 过程 二字, 过程指的是解决问题的步骤是,即先干什么再干什么. 基于该编程思想编写程序,相当于一条流水线,一种机械式的思维方式. 面向对象编程思想: 核心是 ...

  7. Sptringboot 添加子项目

    1:复制一个子项目,修改项目名 2:修改启动类 3:修改pom.xml 4:打开project structure  选择Modules 下一步下一步 5:添加主项目的pom.xml  在<mo ...

  8. 怎么写自己的CMakeLists.txt

    一. 为什么要使用cmake 理论上说,任意一个C++程序都可以用g++来编译.但当程序规模越来越大时,一个工程可能有许多个文件夹和源文件,这时输入的编译命令将越来越长.通常一个小型C++项目可能含有 ...

  9. magento 2 method config

    1. 模板渲染静态文件: <?php echo $this->getViewFileUrl('requirejs::require.js'); ?> 2.

  10. react 生命周期函数介绍

    constructor():构造函数 执行:组件加载钱最先调用一次,仅调用一次. 作用:定义状态机变量. 注意:第一个语句必须为super(), 否则会报错:'this' is not allowed ...