2011-06-30 33 views
1

我想要設計一個Java的函數,它將會有這樣的原型。如何通過Java程序在Windows上查找文件的版本?

public String FindVersion(String FullPath) 
{ 

} 

其中FULLPATH可以是:C:\tmp\readme.txtC:\windows\system32\xcopy.exe 或類似C:\windows\system3

+1

歡迎來到SO。要格式化代碼,請使用編輯器中的「{}」按鈕。對於內聯代碼,請使用反引號。另外,你的問題還不清楚,比如你說「文件版本」是什麼意思? –

+1

我不知道文本文件和目錄有'版本'。一些可執行文件甚至沒有版本(他們會報告)。 –

+3

我們需要知道什麼版本對您意味着什麼。 – Marcelo

回答

0

並非所有的文件跟蹤版本,平均文本文件沒有存儲在文件中的概念或外部編碼有多少次了已編輯。

如果啓用,某些文檔可選擇將版本信息存儲在文檔中。對於這些文件,程序看起來像(僞代碼)

public String FindVersion(String filepath) { 
    check to see if file type can be deduced; 
    check to see if the deduced file type supports versioning; 
    check to see if the file has versioning information; 
    go through the revisions of the file and report the latest one; 
} 

一些文檔版本,但版本信息不存儲在文檔中,它被存儲在獨立跟蹤的版本信息的系統該文件。在這種情況下,您確實想要處理在文檔上創作的版本控制系統。通常這樣的系統具有用於指示受控文檔的哪個版本最後被撤回的實用程序;其他時候,您需要根據查找最接近匹配的所有修訂版來查詢文檔。

基本上,沒有一種方法可以處理每種情況。

+0

感謝您的回答。 如果我會說我只對.dll,.exe和.sys文件感興趣,該怎麼辦? 目前我創建一個VBscript,然後從Java程序中調用它,然後從VBScript輸出中收集版本。 還有別的辦法嗎? –

1

FileVersionInfo是一個Win32 API的東西,所以你需要使用JNI和一些C代碼來訪問它或使用外部庫。我找到一個API,名爲Sigar,它似乎能夠做到這一點

1

您所要求的細節非常特定於運行Java的操作系統的文件系統。直到Java 7(java.nio.file.attribute);我們沒有任何可以提供這些信息的API。唯一的選擇是通過JNI接口使用一些Win 32 API。

+0

Windows API是GetFileVersionInfo,地址爲http://msdn.microsoft.com/en-us/library/windows/desktop/ms647003(v=vs.85).aspx – plusjeff

相關問題