• 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之前
  • 相关阅读:
    面向对象C++编程与实践考试答案与解析
    退役记 Wallace
    ArcGIS中多来源栅格数据的像元对齐设置
    前端进行AES加密接口进行解密
    Java学习笔记 HashSet源码分析
    Java学习笔记 LinkedList源码分析
    Linux学习笔记1 安装JDK
    Java学习笔记 ArrayList源码分析
    Vue+Leaflet实现加载Stamen显示地图
    Leaflet中使用layerGroup图层组实现图层切换
  • 原文地址:https://www.cnblogs.com/zyh5322/p/10786821.html
Copyright © 2020-2023  润新知