繁体   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