簡體   English   中英

是否可以從資產文件中獲取最后修改日期?

[英]Is it possible to get last modified date from an assets file?

奇怪的問題:是否有可能在資產文件夾中獲取文件的最后修改日期,或者這是毫無意義和不可能的?

我問,因為我在應用程序啟動時將一個只讀數據庫復制到數據文件夾中,但是如果現有文件比存儲在assets文件夾中的文件舊(或者如果文件),則只會執行復制不存在)。

如果那不可能,任何人都知道一個更好的約定? 如果需要,我可以在一個單獨的問題中發布。 TIA!

數據庫有多大/多復雜? 您可能會發現使用SQLiteOpenHelper實例來處理此問題更容易,也更靈活,因為getReadableDatabase()調用getReadableDatabase() ,它就會在必要時創建數據庫,並調用onUpgrade為您升級數據庫。

您所要做的就是提供onCreate()來創建數據庫,提供onUpgrade()進行升級,並在數據庫版本發生變化時增加數據庫版本(在onUpgrade() ),Android將為您處理創建和升級數據庫。

或者,(我還沒有嘗試過),看起來AssetManager.list()可以為您提供資產路徑列表,接下來,使用File (String path)獲取數據庫的File對象,最后File.lastModified()獲取修改日期。

嘿,我和你有同樣的問題。 我想復制和資產只是在它更新的時候。 所以我讓sharedPreferences存儲了最后安裝的版本,並用它來比較日期:

我在strings.xml文件中添加一個條目來保存應用程序版本:

<string name="version">0.3</string>

然后我在主類的onCreate方法上放了一個if子句:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if( Float.parseFloat(getString(R.string.version)) > prefs.getFloat("LastInstalledVersion", (float) 0.0 ) ) {
                copyfiles();
}

我將新版本字符串添加到onPause方法的sharedPreferences上,這樣就可以在再次調用onCreate之前添加它:

SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.putFloat("LastInstalledVersion", Float.parseFloat(getString(R.string.version)) );
editor.commit();

可能比在文件本身中使用版本名稱更簡單。

請注意,如果您的版本高於0.0,則復制文件將在第一次打開應用程序時運行,並且只有在更高版本中增加版本字符串時才會再次運行。

請記住,此示例僅在您有一個要比較的文件或不關心單個文件版本時才有效。 否則,您可以使用幾個不同的字符串來存儲文件版本。

對於只讀資產,我嘗試使用文件時間戳( f.lastModified() / f.setSetModified(timestamp) ),但它不起作用,因為f.setSetModified(timestamp)在Android上不起作用。 至少,在我使用的2.3.4上。

請參閱https://stackoverflow.com/a/13996418/755804

我創建了一個構建任務,它保存所有資產文件的最后修改日期,並將其保存到資產目錄中的新文件lastModified.txt 只需將它放在build.gradle的底部build.gradle 仔細檢查資產目錄的路徑。

task saveAllAssetDate {
    def assetDirectory = "src/main/assets";
    def text = ""
    fileTree(assetDirectory).visit { FileVisitDetails details ->
        def name = details.file.path;
        name = name.substring(name.indexOf("assets"));
        text += details.getLastModified() + " " + name + "\n"
    }
    file(assetDirectory + "/lastModified.txt").text = "" + text
}
build.dependsOn saveAllAssetDate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM