20175322《Linux下cp XXX1 XXX2的功能》的实现
《Linux下cp XXX1 XXX2的功能》的实现
一、题目要求
编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数:
- java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十进制数字)转化为二进制文件
- java MyCP -xt XXX1.bin XXX2.txt 用来二进制文件把转化为文本文件(内容为十进制数字)
二、相关信息
打开虚拟机在命令行输入man cp
进行了解
三、设计思路
- 如何实现在命令行中输入参数:使用arges[]数组
- 二进制文件与文本文件的相互转化:
- 二进制文件转文本文件:通过
Integer.parseInt
方法实现,java MyCP -xt XXX1.bin XXX2.txt
- 文本文件转二进制文件:将十进制数模2取余数,将得到的二进制结果用字符串格式输出即可,
java MyCP -tx XXX1.txt XXX2.bin
- 二进制文件转文本文件:通过
四、代码实现
- 伪代码
命令行读入三个参数:第一个ch代表转化的格式,第二个s1代表要读取的源文件,第三个s2代表要写入的目标文件
参数为“-xt”从bin文件中读取二进制数,转化为十进制后写入txt文件中
参数为“-tx”从txt文件中读取十进制数,转化为二进制后写入bin文件中
- 产品代码
import java.io.*;
public class MyCP {
public static void main(String arges[]) {
String result = "";
String transform = arges[0];//进制转化形式
String sourceFilename = arges[1];//源文件名
String targetFilename = arges[2];//目标文件名
File sourceFile = new File(sourceFilename);
File targetFile = new File(targetFilename);
try {
FileReader in = new FileReader(sourceFile);
BufferedReader infile = new BufferedReader(in);
FileWriter out = new FileWriter(targetFile);
BufferedWriter outfile = new BufferedWriter(out);
String number = infile.readLine();
if(transform.equals("-tx")) {
int n;
int number1 = Integer.parseInt(number);
for(int i=number1;i>0;i=i/2) {
if(i%2==0)
n = 0;
else
n = 1;
result = n + result;
}
}
else if(transform.equals("-xt")) {
int number1 = Integer.parseInt(number,2);
result = String.valueOf(number1);
}
outfile.write(result);//将第一个文件转化结果写入第二个文件
outfile.flush();//清空缓存区
outfile.close();//释放内存
out.close();//关闭流
}
catch(IOException e) {
System.out.println("Error"+e); //若程序出现错误,输出原因
}
}
}
五、运行结果截图
六、码云链接
七、实验所遇问题和解决
- 问题:十进制得到的二进制数据转换回去后发现数字和原来不一样
- 解决方法:发现二进制的运算结果需要从后之前保留,应该将每次得到的n放在字符串result之前