Download presentation
Presentation is loading. Please wait.
1
王豐緒 銘傳大學資訊工程學系 問題:JAVA 二元檔輸出入
2
問題基本資訊 標題 問題描述 目的 版本:2011/08/05 提示 二元檔案輸出入
給一個圖型檔,讀取其內容之後,以位元組的方式存到另一個文字檔案上(格式如附件!)。此外,並可提供複製功能。 目的 練習二元檔案輸出入 版本:2011/08/05 提示 請以UML圖型繪製本問題的物件模型 以JAVA實作程式
3
輸出格式 十六進位內容 字元符號內容 47 49 46 38 39 61 0A 00 0A 00 G I F 8 9 A
十六進位內容 字元符號內容 A 00 0A 00 G I F 8 9 A F ? ? ? ? ? ? ? C0 C0 C0 ? ? ? ? ? ? ? ? ? FF FF 00 FF FF ? ? ? ? 00 FF FF 00 FF 00 FF FF FF FF ? ? ? ? ? ? ? FF ? 10個bytes
4
問題分析:掌握領域知識 問題:給一個圖型檔,讀取其內容之後,以位元組的方式存到另一個文字檔案上(格式如附件!)。此外,並可提供複製功能。
學習單1:請同學整理相關領域知識 1. JAVA 二元檔案輸出入相關知識 2. String.format()指令
5
物件模型 學習單2:請同學根據問題描述,尋找適當的物件模型
給一個圖型檔,讀取其內容之後,以位元組的方式存到另一個文字檔案上(格式如附件!)。此外,並可提供複製功能。 名詞 檔案名稱 檔案內容
6
ImageFileAnalysis類別 資料成員 功能成員 private byte[] content;
private String filename ; 功能成員 public void readContent() :讀取檔案內容 public void copyContent(String filename) :複製檔案內容 public void analyzeContent(String result_file_name) :以不同格式顯示檔案內容並儲存到文字檔中 建構元: ImageFileAnalysis(String filename)
7
學習單3: JAVA Code
8
學習任務 請利用Jblue撰寫本問題的JAVA Code,並且進行測試
9
ImageFileAnalysis類別 import java.io.*; import java.util.*;
public class FileTokenizer { private byte[] content; private String filename ; public ImageFileAnalysis(String filename) this.filename = filename; } public void readContent() try { BufferedInputStream fin =new BufferedInputStream( new FileInputStream(filename)); int len = fin.available(); //取得檔案大小 content = new byte[len]; fin.read(content); fin.close(); } catch (Exception e) { e.printStackTrace();
10
ImageFileAnalysis類別 public void copyContent(String filename) { try {
BufferedOutputStream fout = new BufferedOutputStream(new FileOutputStream(filename)); fout.write(content); fout.close(); } catch (Exception e) { e.printStackTrace(); }
11
ImageFileAnalysis類別 public void analyzeContent(String result_file_name) { try { PrintWriter ao = new PrintWriter(new BufferedWriter(new FileWriter(result_file_name))); ao.println(" 十六進位內容 \t 字元符號內容"); int len = content.length; for (int i=0; i< len; ){ if ( (i % 10) == 0) ao.println(); //換行 for (int k=0;k<10;k++) { if ((i+k)< len) { ao.print( String.format("%02X",content[i+k])); ao.print(' '); }else { ao.print(" "); } } ao.print('\t'); if (i<len) { ao.print( String.format("%C",(char)content[i+k])); i++; } } } ao.close(); } catch (Exception e){ e.printStackTrace();
12
反思(1/3) 學習單4:請同學進行學習反思,你從此問題學到什麼? 如何讀取二元檔案 如何複製二元檔案 如何將二元資料以不同格式顯示
13
延伸學習 請同學列舉其它與本問題相關的學習 String.format() 分析其他相關圖型檔案資料
14
範例:二元檔輸入 FileInputStream BufferedInputStream 二元檔 available()
read(byte[]) 取得檔案大小 讀取資料到陣列
15
BufferedOutputStream
範例:二元檔輸出 二元檔 FileOutputStream BufferedOutputStream write(byte[]) 寫入資料
16
String.format() 可依照某種格式顯示字串內容 例子
(請參閱: 例子 String.format("%,d", 1234); 1,234 String.format("%05d", 1234); 01234 String.format("%02X“, 10); 0A String.format("%C“, 48); 0
Similar presentations