第九周学习总结

一、作业要求

编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数:

  • java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十进制数字)转化为二进制文件

  • java MyCP -xt XXX1.bin XXX2.txt 用来二进制文件把转化为文本文件(内容为十进制数字)

二、题目分析

1.输入与输出

  • 读取文件内容并将更改后的内容输入到指定文件中——运用流来实现

2.判断

  • 判断读入的文件内容是二进制还是十进制——利用一个变量来存入输入的参数“-xt”或“-tx”

3.进制转换

  • 利用函数Integer.toBinaryString使得十进制转换为二进制,利用函数Integer.valueOf使得二进制转换为十进制

三、代码

import java.io.*;
public class MyCP {
    public static void main(String[] args) throws IOException {
        String d=args[0];//获得第一个参数
        String File1=args[1];//获得第二个参数:文件名
        String File2=args[2];//获得第三个参数:文件名
        File source = new File(File1);//读取的文件
        File target = new File(File2);//写入的文件

        if(d.equals("-tx")){
            FileReader reader = new FileReader(source);
            FileWriter writer = new FileWriter(target);
            tx(reader, writer);
        }

        if(d.equals("-xt")){
            FileReader reader = new FileReader(target);
            FileWriter writer = new FileWriter(source);
            xt(reader, writer);
        }
    }
    //十转二
    public static void tx(FileReader reader, FileWriter writer) {
            try (FileReader In = reader; FileWriter Out = writer) {
                char[] number = new char[1];
                String result = null;
                String two = null;
                while ((In.read(number)) != -1) {//读取一个十进制数字
                    int number1 = (int) number[0];//字符到数字强制转换
                    result = "";
                    two = Integer.toBinaryString(number1);
                    while (two.length() < 4) {//十进制单个数字的范围为0-9,对应二进制表示范围为0000-1001,为下次转换为十进制方便,将其统一补充为四个数字
                        result = '0' + result;
                    }
                }
                result = result + two;
                Out.write(result);//FileWriter的write()方法保存得到的二进制到文件中
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }


    //二转十
    public static void xt(FileReader reader, FileWriter writer) {
        try (FileReader In = reader; FileWriter Out = writer) {
            char[] number = new char[4];
            char ch;
            while((In.read(number))!=-1) {
                String result="";
                In.read();
                for(int i=0;i<4;i++){
                result=result+number[i];
                }
                int ten=Integer.valueOf(result,2);//Integer.valueOf()方法将二进制转为十进制
                ch = (char)ten;
                Out.write(ch);//FileWriter的write()方法保存得到的十进制
            }
        }catch (IOException e) {
            e.printStackTrace();
        }

    }    

}

四、测试结果



posted @ 2019-04-28 23:03  20175105鑫浩  阅读(124)  评论(0编辑  收藏  举报
}