一、作业要求
编写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(); } } }