第九周学习总结
一、作业要求
编写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();
}
}
}
四、测试结果