20175221 MyCP(课下作业,必做)
生活随笔
收集整理的這篇文章主要介紹了
20175221 MyCP(课下作业,必做)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
MyCP(課下作業,必做)
任務詳情
- 編寫MyCP.java 實現類似Linux下cp XXX1 XXX2的功能,要求MyCP支持兩個參數:
- - java MyCP -tx XXX1.txt XXX2.bin 用來把文本文件(內容為十進制數字)轉化為二進制文件 - java MyCP -xt XXX1.bin XXX2.txt 用來二進制文件把轉化為文本文件(內容為十進制數字)
- 提交測試代碼和運行結果截圖,加上學號水印,提交碼云代碼鏈接。 需要提交博客和答辯
設計思路
-
?剛看題目時,理解錯了題目的意思,以為是要把一個二進制文件先轉換成序列,再輸出對應的十進制,最后把序列轉換成文件。后來和同學討論才發現,自己沒仔細看題,理解錯了方向。
- 由于太久沒使用Linux的操作指令,于是使用?man?,?cp --help?來了解對應功能
-
我大概構思了一下,要完成這個實驗可能會遇到的一些難點:
- 如何完成二進制與十進制數字的互相轉換
- 在txt中轉化完的數據,怎樣寫入另一個文件
-
針對這幾個問題,我去查閱了相關資料
-
十進制轉二進制:
-
二進制轉十進制
-
文件的寫入和讀取
-
代碼如下
- 1 import java.io.*;
2 import java.util.Scanner;
3 public class MyCP {
4 public static void main(String[] args) throws IOException {
5 //輸入十進制文本
6 Scanner scan=new Scanner(System.in);
7 String str=scan.nextLine();
8 String[]ch=str.split(" ");
9 //調用tx方法把文本文件轉化為二進制文件
10 if(ch[2].equals("-tx")){
11 FileReader reader = new FileReader("/home/zxj/twoweek/MyCP/testorigin.txt");
12 FileWriter writer = new FileWriter("/home/zxj/twoweek/MyCP/testchange.bin");
13 tx(reader, writer);
14 }
15 //用xt方法把二進制文件把轉化為文本文件
16 if(ch[2].equals("-xt")){
17 FileReader reader = new FileReader("/home/zxj/twoweek/MyCP/testchange.bin");
18 FileWriter writer = new FileWriter("/home/zxj/twoweek/MyCP/testchange2.txt");
19 xt(reader, writer);
20 }
21 }
22 public static void tx(FileReader reader, FileWriter writer) {
23 try (FileReader In = reader; FileWriter Out = writer) {
24 char[] number = new char[1];
25 while((In.read(number))!=-1) {//FileReader的read()方法獲取對應的十進制數字
26 int number1=(int)number[0];
27 String result="";
28 String totwo=Integer.toBinaryString(number1);//調用Integer.toBinaryString將十進制轉為二進制
29 for(int i=0;i<8;i++){//返回一個二進制的無符號整數
30 if(i<(8-totwo.length())) {
31 result = result+'0';
32 }
33 }
34 result=result+totwo;
35 Out.write(result, 0, 8);//FileWriter的write()方法保存得到的二進制
36 Out.write(" ");
37 }
38 }catch (IOException e) {
39 e.printStackTrace();
40 }
41 }
42 public static void xt(FileReader reader, FileWriter writer) {
43 try (FileReader In = reader; FileWriter Out = writer) {
44 char[] number = new char[8];
45 char[] ch = new char[1];
46 while((In.read(number))!=-1) {
47 String result="";
48 In.read();//FileReader的read()方法獲取對應的8位二進制數字
49 for(int i=0;i<8;i++){
50 result=result+number[i];
51 }
52 int ten=Integer.valueOf(result,2);//Integer.valueOf()方法將二進制轉為十進制
53 ch[0]=(char)ten;
54 Out.write(ch, 0, 1);//FileWriter的write()方法保存得到的十進制
55 }
56 }catch (IOException e) {
57 e.printStackTrace();
58 }
59
60 }
61
62 }
?
?
結果截圖
- 首先在指定路徑下創建文本,并在其中輸入十進制數字
?
- 執行?java MyCP -tx testorigin.txt testchange.bin?,生成含有對應二進制數字的bin文件
- 查看bin文件內容
- 再執行?java MyCP -xt testchange.bin testchange2.txt?,將二進制數字再轉換回十進制數字,并生成文本文件
-
問題與解決方法
-
問題1:
-
生成的bin文件無法打開查看
-
問題1解決方法:
-
我點擊選擇程序,查找相關應用,但遺憾的是沒有合適的應用可以安裝來打開bin文件,我只好回到命令行進到vim編輯頁面查看。
-
問題2:
- 輸入命令報錯找不到路徑文件
-
問題2解決方法:
- 這個是自己犯傻了,執行命令之前,沒有創建對應的十進制文本文件。所以只要在執行命令前,在指定路徑下創建對應的十進制文本文件即可。
碼云鏈接
?
參考資料
Integer.parseInt(s)與Integer.valueOf(s)的區別詳解
java源碼Integer類toBinaryString()方法探究
java FileReader和FileWriter
轉載于:https://www.cnblogs.com/zxja/p/10778735.html
總結
以上是生活随笔為你收集整理的20175221 MyCP(课下作业,必做)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python爬虫beautifulsou
- 下一篇: 20175208 《Java程序设计》第