參考:java
首先要知道Java card裏面的文件系統結構,也就是有哪些文件:數據結構
包括四大類文件,應用基本文件——也就是髮卡方官方的一些信息,而後是持卡人我的信息的文件,再就是EP(電子錢包)文件,以及最重要的密鑰文件。而且密鑰文件必須先於其餘三個文件以前建立,由於沒密碼你弄啥操做不科學呀。app
幾大文件反應到代碼中就是幾大數據結構:函數
理解了文件系統以後就要一一去看各個文件代碼模塊是怎麼實現的:工具
舉個例子:學習
這是二進制文件數據結構的 部分代碼,能夠看到它的構造函數須要傳進一個pdata參數,其實就是要傳輸apdu命令的data部分給它。因爲這幾大數據結構代碼課上都給得差很少 了,並且本篇只講文件系統的建立,因此目前只須要知道這幾大文件數據結構的接口就夠了,主要仍是看主程序代碼,也就是purse.Java。嗯,本次java card的開發就是以電子錢包的開發做爲項目來學習的。開發工具
先直接上主程序purse.java的代碼,其餘幾個java文件的代碼在後面學習篇再放:大數據
既然是要建立文件,固然就要先從終端獲取apdu命令,判斷它的命令裏面是否是要卡片建立文件,怎麼判斷呢?經過ins值,就是這句代碼:加密
[java] view plain copyurl
這裏有個常量,在condef.java中定義:
condef.java文件裏面定義了一些ins值常量,還有就是若是是要建立文件,那要建立的是什麼文件呢,經過pdata的第一位判斷,也就是pdata[0]:
因此condef.java裏面也定義了這部分文件類型的常量。
既然已經判斷出了apdu命令是要咱們建立文件,同時又判斷出了要建立的是什麼文件,接下來就簡單了,就是直接調用幾大文件數據結構的接口去建立相應的文件,同時,這裏要判斷一些異常的狀況,也就是apdu命令有輸入錯誤的狀況,而後返回相應的異常給終端。好比:
[java] view plain copy
嗯,建立文件就是這麼簡單了,主要就是要理解文件系統裏面的幾大文件,同時看懂文件數據結構的幾個java文件是怎麼實現的。而後調用就很簡單了。
最後,看看運行結果,因爲終端要發送很多命令,因此能夠把命令所有放到文件裏面,而後直接在命令行中讀取文件,而後就會在模擬器中執行文件裏面的全部命令了。
首先,把命令腳本名稱改一下,主要是改後綴名爲jcsh:
而後運行以後再命令行中先輸入:
[java] view plain copy
查找文件路徑的快速方法(通用電腦小常識),查詢文件屬性,而後就能夠看到文件所在的路徑了。
輸入上面那條路徑命令以後,就再輸入文件名(不包括後綴),好比這裏是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