設計一個文件系統

參考:java

首先要知道Java card裏面的文件系統結構,也就是有哪些文件:數據結構

 

包括四大類文件,應用基本文件——也就是髮卡方官方的一些信息,而後是持卡人我的信息的文件,再就是EP(電子錢包)文件,以及最重要的密鑰文件。而且密鑰文件必須先於其餘三個文件以前建立,由於沒密碼你弄啥操做不科學呀。app

幾大文件反應到代碼中就是幾大數據結構:函數

 

理解了文件系統以後就要一一去看各個文件代碼模塊是怎麼實現的:工具

舉個例子:學習

這是二進制文件數據結構的 部分代碼,能夠看到它的構造函數須要傳進一個pdata參數,其實就是要傳輸apdu命令的data部分給它。因爲這幾大數據結構代碼課上都給得差很少 了,並且本篇只講文件系統的建立,因此目前只須要知道這幾大文件數據結構的接口就夠了,主要仍是看主程序代碼,也就是purse.Java。嗯,本次java card的開發就是以電子錢包的開發做爲項目來學習的。開發工具

先直接上主程序purse.java的代碼,其餘幾個java文件的代碼在後面學習篇再放:大數據

 


既然是要建立文件,固然就要先從終端獲取apdu命令,判斷它的命令裏面是否是要卡片建立文件,怎麼判斷呢?經過ins值,就是這句代碼:加密

 

 

[java] view plain copyurl

在CODE上查看代碼片派生到個人代碼片

  1. case condef.INS_CREATE_FILE:        return create_file();  

 

 

這裏有個常量,在condef.java中定義:

 

 


condef.java文件裏面定義了一些ins值常量,還有就是若是是要建立文件,那要建立的是什麼文件呢,經過pdata的第一位判斷,也就是pdata[0]:

 

因此condef.java裏面也定義了這部分文件類型的常量。

既然已經判斷出了apdu命令是要咱們建立文件,同時又判斷出了要建立的是什麼文件,接下來就簡單了,就是直接調用幾大文件數據結構的接口去建立相應的文件,同時,這裏要判斷一些異常的狀況,也就是apdu命令有輸入錯誤的狀況,而後返回相應的異常給終端。好比:

 

[java] view plain copy

在CODE上查看代碼片派生到個人代碼片

  1. if(papdu.cla != (byte)0x80)  
  2.     ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);  
  3.   
  4. if(papdu.lc != (byte)0x07)  
  5.     ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);  
  6.   
  7. if(EPfile != null)//有文件了還重複建立則會報錯  
  8.     ISOException.throwIt(ISO7816.SW_CONDITIONS_NOT_SATISFIED);  
  9.   
  10. if(keyfile == null)//都還沒密鑰文件(必須先於任何其餘文件建立)  
  11.     ISOException.throwIt(ISO7816.SW_CONDITIONS_NOT_SATISFIED);  


嗯,建立文件就是這麼簡單了,主要就是要理解文件系統裏面的幾大文件,同時看懂文件數據結構的幾個java文件是怎麼實現的。而後調用就很簡單了。

 

最後,看看運行結果,因爲終端要發送很多命令,因此能夠把命令所有放到文件裏面,而後直接在命令行中讀取文件,而後就會在模擬器中執行文件裏面的全部命令了。

首先,把命令腳本名稱改一下,主要是改後綴名爲jcsh:

而後運行以後再命令行中先輸入:

 

[java] view plain copy

在CODE上查看代碼片派生到個人代碼片

  1. /set-var path "文件路徑(不包括文件名.jcsh)"  

 

 

查找文件路徑的快速方法(通用電腦小常識),查詢文件屬性,而後就能夠看到文件所在的路徑了。

輸入上面那條路徑命令以後,就再輸入文件名(不包括後綴),好比這裏是purse,而後回車就可讓模擬器執行命令腳本里面的全部命令了,注意,有 時候腳本文件裏面會有一些奇奇怪怪的未註釋的中文字符,好比中文的空格,有不少軟件開發工具都對這些很是敏感會致使執行腳本出錯,我在執行腳本的時候就遇 到了,解決辦法是從新建一個txt文件,而後改下文件名,把腳本命令複製進來。

命令腳本內容:

運行結果:

能夠看到都是No Error.也就把四大文件都給創建好了,後面的就是在文件裏面進行添加密鑰等等的操做了,這是後面學習篇的內容。值得注意的是,每次從新運行的時候,模 擬器不會保存你以前建立的文件,畢竟只是個模擬器嘛。因此除非一直運行着保留着上面建立文件的狀態,不然從新運行後應當從新創建文件。

 

對文件進行復制,壓縮,解壓等操做,至關於一個簡單的文

管理系統。對此我新加了剪切,刪除,和重命名等功能。程序的總體輸入

控制是採用圖形用戶界面,同時爲了減小用戶輸入時沒必要要的錯誤,程序

還支持文件選擇器功能,用戶能夠直接點擊相應的按鈕選擇相應的文件或

文件夾。

 

1

 

複製功能實現了將文件複製到指定的文件夾中(包括文件夾的複製

和單個文件的複製)

,

同時容許用戶選擇不一樣類型的文件複製。其

中有全文件複製(文件夾裏全部文件所有複製)

、無空文件夾的文

件複製

(即複製的文件夾不含空文件夾)

指定參數的文件複製

(即

文件夾複製時能夠指定相應的類型參數

doc

txt

等選擇要被複制

的文件類型)

 

2

 

壓縮功能實現將文件壓縮到指定路徑(包括單個文件的壓縮和文件

夾的壓縮)

 

3

 

解壓功能實現將指定的壓縮文件解壓到指定的路徑

 

4

 

剪切功能實現將制訂文件夾下的文件剪切到制訂的文件夾下,與復

制不一樣的,剪切後該文件只存在於剪切後的文件夾。

 

5

 

刪除功能實現了文件的刪除和文件夾刪除,其中文件的刪除能夠直

調用文件的方法刪除文件,而文件夾的刪除必須遞歸刪除文件夾中

的全部文件,而後再層層調用方法刪除文件夾。

 

6

 

重命名功能實現對指定文件夾下的文件的重命名,若是該文件夾下

已經存在該文件名,則提示從新命名

參考:http://wenku.baidu.com/link?url=U8NnYDIKsvxyJlGGzzm8CoKyuUTgZgTLKTFEO-FqAd5hmcXaLSFWFi7gwhnEmTgYnjrRKJnKZHJH_7TMYSMhcpZ5bMUiSe_B8BgDQnWDmV7

參考:https://my.oschina.net/courage/blog/474323

相關文章
相關標籤/搜索