20175314薛勐 MyOD(课下作业,选做)

MyOD(课下作业,选做)

要求

编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能

思路

伪代码:

    读取命令行输入的参数(文件名)
    以16为每个字符串的长度读取文件中的内容,得到字符串s1
    每读取一个,进行下列操作直到文件中的消息全部读完:
    {
        设定新的字符串s2=s1
        先输出每行开头printf("%07o",截止到上一行,字符的个数)
        按一定间隔输出s1
        换行
        按一定间隔输出s2中每个字符的ASCII码
    }
    最后一行输出字符的总个数printf("%07o",字符的总个数)

代码

MyOD

import static java.lang.System.out;
import java.io.*;
import java.sql.*;
import java.util.Scanner;
public class MyOD {
    public static void main(String[] args){
        String FileName=args[0];
        int n=-1,len=0,FileLen=0;
        byte [] a=new byte[100];
        try  {
            RandomAccessFile f2 = new RandomAccessFile(FileName, "r");
            FileLen=(int)f2.length();//获得文件中字符的个数
        }
        catch (FileNotFoundException e) {}
        catch (IOException e){}
        try{
            File f=new File(FileName);
            InputStream in = new FileInputStream(f);
            while((n=in.read(a,0,16))!=-1) {//不断读取文件中的字符,每次读取16个,n是实际读取的个数
                String s=new String (a,0,n);
                out.printf("%07o",len);//输出每一行的开头
                char [] ch=s.toCharArray();//将读取到的字符串转化为字符数组
                for(int i=0;i<s.length();i++){
                    System.out.print("  ");
                    System.out.print(Integer.toHexString((int)ch[i]));
                }//第一行先按格式输出的ASCII码
                len=len+n;
                if(len==FileLen){
                    System.out.print("   ");
                    System.out.print("0a");
                }
                System.out.println();
                System.out.print("       ");
                for(int i=0;i<s.length();i++){
                    System.out.print("   ");
                    System.out.print(ch[i]);
                }//第二行按格式输出每个字符
                if(len==FileLen){
                    System.out.print("   ");
                    System.out.print("\n");
                }//全部输出完毕后要输出最后的“
”
                System.out.println();
            }
            out.printf("%07o",len);//最后一行是总字符个数的8进制表示
            in.close();
        }
        catch(IOException e) {
            System.out.println("File read Error"+e);
        }
    }
}

测试结果

XXX.txt

  • My name is Barry Allen,and I am the fastest man alive.

MyOD.java

码云链接

参考资料

原文地址:https://www.cnblogs.com/SANFENs/p/10786847.html