王宏浩 富強 徐東晨
摘要:隨著時代的發(fā)展和科技的進步,Internet技術(shù)也得到了快速的發(fā)展。在這樣的條件下,java語言以其所獨有的特點,被廣泛應(yīng)用于多種設(shè)備、網(wǎng)絡(luò)和計算機中。盡管java可以跨平臺,具有良好的可移植性,但是PC機上,尤其是WINDOWS系統(tǒng)下,要通過java實現(xiàn)對系統(tǒng)文件的調(diào)用則較為困難。論文結(jié)合筆者研究,闡述了如何利用已經(jīng)寫好的FATFS文件系統(tǒng)C代碼,在JNI技術(shù)基礎(chǔ)上實現(xiàn)PC機上文件系統(tǒng)功能的調(diào)用。
關(guān)鍵詞:SOA;文件系統(tǒng);JNI;讀文件;寫文件1JNI技術(shù)
使用JNI技術(shù)的最終目的就是為了能夠在完成編寫頭文件和本地程序的基礎(chǔ)上,再借助C/C++文件生成一個動態(tài)庫文件,然后將其加載至Java程序中,確保其成功運行。具體步驟可以分為以下五步:第一,構(gòu)建Java工程,編寫相應(yīng)的Java代碼。在這一環(huán)節(jié)中,首要任務(wù)是將需要定義的動態(tài)庫名稱加載至Java類中,并且需要確定本地方法。第二,編寫并執(zhí)行.bat文件,從而生成與Java代碼相對應(yīng)的頭文件。第三,編寫本地代碼,以保證Java可以與C/C++數(shù)據(jù)文件之間的相互轉(zhuǎn)換。第四,編譯本地代碼,從而生成DLL或者.SO文件。第五,加載已生成的動態(tài)庫文件至Java代碼之內(nèi),并將Java程序運行。
2SOA三層構(gòu)架下FATFS文件系統(tǒng)的移植
SOA即Service-Oriented Architecture,是面向服務(wù)的體系結(jié)構(gòu),它的出現(xiàn)解決了如何提高系統(tǒng)的擴展性的問題。通過SOA的三層構(gòu)架,有效的解決了諸多問題。這可以從兩個方面分析,即邏輯層的SOA三層構(gòu)架以及實現(xiàn)層SOA三層構(gòu)架。
2.1 邏輯層SOA三層構(gòu)架
邏輯層SOA三層構(gòu)架的主要作用就是確保業(yè)務(wù)需求與系統(tǒng)的分離。根據(jù)不同的應(yīng)用方式,SOA可以實現(xiàn)不同語義層定義相應(yīng)的應(yīng)用協(xié)議語言。這樣就可以實現(xiàn)針對特定應(yīng)用系統(tǒng)的系統(tǒng)需求映射,從而達到將業(yè)務(wù)需求與系統(tǒng)之間的銜接的目的。邏輯層SOA三層構(gòu)架是針對FATFS文件系統(tǒng)之間的底層驅(qū)動函數(shù)。一般來說FATFS文件系統(tǒng)有六個接口函數(shù)與硬件層相對應(yīng),即磁盤初始化、獲取當前磁盤的狀態(tài)、寫扇區(qū)、讀扇區(qū)、獲取當前時間以及存儲介質(zhì)控制函數(shù)。
2.2 實現(xiàn)層SOA三層構(gòu)架
這與邏輯層SOA三層構(gòu)架相對應(yīng),引擎映射對應(yīng)概念模型需求層;流程映射對應(yīng)邏輯模型語義層;構(gòu)建映射對應(yīng)物理模型服務(wù)層。
因為論文內(nèi)實現(xiàn)的PC機下Java對文件系統(tǒng)功能的調(diào)用是基于Java調(diào)用C而實現(xiàn)的,那么邏輯層SOA三層構(gòu)架內(nèi)的服務(wù)層之中的底層函數(shù)是與實現(xiàn)層的構(gòu)件池相對應(yīng)的,而實現(xiàn)層的引擎則是Java,這樣通過Java引擎就可以在調(diào)用文件系統(tǒng)流程的過程中生成的動態(tài)庫文件達到實現(xiàn)文件系統(tǒng)的目的。
3PC機下Java對文件系統(tǒng)功能調(diào)用
通過對前面SOA三層構(gòu)架的分析,并在此基礎(chǔ)上實現(xiàn)了FATFS文件系統(tǒng)的移植,接下來就可以實現(xiàn)通過Java對PC機下文件系統(tǒng)功能的調(diào)用。為了便于實現(xiàn)和測試,筆者所采用的測試平臺為VC++以及eclipse平臺。具體實驗流程如下所述:
第一步,構(gòu)建Java工程Rename,其中設(shè)置其包名為filesystem,類FileSystem。
第二步,在代碼FileSystem.java中聲明本地方法。
其中:①函數(shù)表示對文件的重命名,path_old表示文件名,而path_new則代表修改以后的文件名;
②函數(shù)則表示需要根據(jù)路徑來讀取相應(yīng)的文件夾,代碼String path文件夾;
③函數(shù)則代表按照path的路徑進行文件數(shù)據(jù)的寫入;
④函數(shù)意為讀取相應(yīng)路徑內(nèi)的文件夾的內(nèi)容;
⑤函數(shù)表示讀取路徑寫文件的相關(guān)信息,諸如文件的創(chuàng)建時間等;
⑥函數(shù)指需要為path路徑創(chuàng)建一個文件夾;
⑦函數(shù)指將該路徑下文件夾的屬性改變。
第三步,加載動態(tài)庫,其語句為
static
{
System.loadLibrary("renamel");
}
Renamel即表示動態(tài)庫的名字,這樣Java就可以憑借調(diào)用上述中介DLL的方式,間接地達到調(diào)用真正第三方DLL的目的。
第四步,通過編譯,從而生FileSystem.class文件。
第五步,編寫執(zhí)行.bat文件,這樣就可以生成與Java代碼相對應(yīng)的頭文件,即filesystem_FileSystem.h。
第六步,通過VC6.0編譯器,就能夠生成renamel.dll文件。
這樣一來就實現(xiàn)了在PC機下Java對文件系統(tǒng)功能的調(diào)用。
4結(jié)語
綜上所述,在PC機下實現(xiàn)Java對文件系統(tǒng)功能的調(diào)用是一個復(fù)雜的過程,需要涉及到眾多方面。而JNI技術(shù)保障這一功能實現(xiàn)的前提。為了實現(xiàn)這一目的,就必須了解和掌握JNI技術(shù)需要的軟件和平臺,并在此基礎(chǔ)上分析FATFS文件系統(tǒng)的結(jié)構(gòu)基礎(chǔ),并最終借助SOA的三層構(gòu)架實現(xiàn)對PC上的FATFS系統(tǒng)文件的移植。最后,憑借JNI技術(shù),即可實現(xiàn)WINDOWS系統(tǒng)下Java對文件系統(tǒng)功能的調(diào)用。
[參考文獻]
[1]常青,張剛,王耀力.SOA三層構(gòu)架在嵌入式文件系統(tǒng)上的實現(xiàn)[J].太原理工大學學報,2011(03).