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之前
原文地址:https://www.cnblogs.com/zyh5322/p/10786821.html