5

我们的应用程序使用java.util.prefs.Preferences类来存储一些用户数据字段。下面是我们的首选项类的代码片段。我们的首选项存储工作正常,但是我们注意到首选项继续大约每 30 秒左右进行一次磁盘访问。有没有办法在 Preferences 类中禁用这些后台磁盘访问?(.userRootModeFile.root 大约每 30 秒更改一次)

public class NtapPreferences {

private static Preferences prefs = Preferences.userRoot(); //.systemRoot();

/** Prepends "NTAP.<applicationName>." to 'key' for system-wide uniqueness. */
private static String getKeyForApp ( String key ) {
    return "NTAP." + Application.getApplicationName() + "." + key;
}

/**
 * Returns the application preference value for 'key'.<br/>
 * <br/>
 * If 'key' is not a defined preference, then 'def' is returned.
 */
public static String get ( String key, String def ) {
    return prefs.get(getKeyForApp(key), def);
}

/** Sets the application preference value for 'key' as 'value'. */
public static void put ( String key, String value ) {
    //TODO how do we want to resolve failures to put data in the preferences?
    try {
        prefs.put(getKeyForApp(key), value);
        prefs.flush();
    } catch (NullPointerException e) {
        LOG.error(NtapPreferences.class, e);
    } catch (IllegalArgumentException e) {
        LOG.error(NtapPreferences.class, e);
    } catch (IllegalStateException e) {
        LOG.error(NtapPreferences.class, e);
    } catch (BackingStoreException e) {
        LOG.error(NtapPreferences.class, e);
    }
}

/** Removes the application preference value for 'key' if one is defined. */
public static void remove ( String key ) {
    prefs.remove(getKeyForApp(key));
}

}

4

1 回答 1

4

This behaviour is controlled by a system property called "java.util.prefs.syncInterval". This gives the interval (in seconds) between synchronizations as an integer (int) valued string. You can't turn off syncing entirely, but you can set the interval to a very large value ... though there is an upper bound of (I / we think) 597 days, due to the way the code converts the interval to milliseconds.

Reference:

于 2013-06-29T04:13:32.867 回答