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