在java应用程序中保存用户设置的最佳方法是什么?

在Java桌面应用程序中安全地保存用户设置的最佳方法是什么? 例如,如果我想保存一个Ftp帐户设置,那么最好的方法是什么?

谢谢

首选项API是存储用户和系统首选项的好方法。 如果你想存储密码,你必须encryption。 这里是一个很好的文章,可以让你开始。

Java中的encryption首选项

我通常存储在用户数据目录中,应用程序名称的子目录后跟应用程序版本。

 public static String getUserDataDirectory() { return System.getProperty("user.home") + File.separator + ".jstock" + File.separator + getApplicationVersionString() + File.separator; } 

我已经使用了下面的代码3年。 这种方法在Windows,Linux或Mac上运行得很好。

请注意,在Windows中,请勿将其存储在Program Files ,因为Windows Vista或更高版本中的UAC可能会给您带来很多麻烦。

请记住在应用程序名称的前面加上一个点,以便它将成为Linux中的隐藏文件夹。

使用这种方法的好处是,你不仅仅限于存储原始值。 相反,您可以使用xstream将整个对象状态保存到磁盘

例如 :

 public static boolean toXML(Object object, File file) { XStream xStream = new XStream(); OutputStream outputStream = null; Writer writer = null; try { outputStream = new FileOutputStream(file); writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8")); xStream.toXML(object, writer); } catch (Exception exp) { log.error(null, exp); return false; } finally { close(writer); close(outputStream); } return true; } 

安全地存储单个密码相当困难。 假设你使用一些密钥encryption密码。 那么当你的应用程序再次启动时,它需要这个密钥,从哪里得到?

如果询问用户,那么他可能只需input您首先存储的ftp密码。 如果它从某处读取密钥,那么你需要保密密钥,我们又回到了我们开始的地方。

如果你保存了多个密码,那么询问用户input一个“保险箱”的密码可能会更友好,但是你却处理了过期密码的麻烦。

有产品可用来处理这些东西,如果你有严重的需求,那么你可能需要调查他们。