【问题标题】:Storing Instances with Serialization使用序列化存储实例
【发布时间】:2015-12-13 05:54:02
【问题描述】:

我正在制作一个需要保存对象以供将来检索的程序。该程序将作为 jar 文件分发给不同的人。

当为对象输入/输出流提供绝对路径 (String) 作为参数时,我已经可以存储和检索类的实例。 我还可以将图像和文本文件保存在资源文件夹中,并通过getClass().getResource(String path) 将其作为资源获取。

问题来了: 我已经尝试了所有可能的方法来将对象保存到资源文件夹/从资源文件夹中获取对象。处理 URLS 和文件而不是普通的字符串变得非常奇怪。有人可以帮帮我吗?我需要能够保存和检索相对于类路径的对象,以便当程序是保存在计算机上不同路径中的 jar 文件时我可以访问这些对象。

【问题讨论】:

  • 认为类路径仅由只读 jar 文件构成。用户读取和保存的文件不应被类加载器作为资源加载。它们应该作为文件加载,使用文件 IO。 Class.getResource() 对于嵌入在应用程序中的只读资产(您的应用程序图标、启动屏幕等)很有用

标签: java serialization resources deserialization relative-path


【解决方案1】:

1:资源文件夹(jar),只读。

你可以在打包的时候创建数据,存储在jar中,但是之后,它就完成了:只能读取

2:因此您希望用户可以读写(并且它没有嵌入到您的应用中)。

  • 如果是个人数据,您可以使用(PC):

    String appdata= System.getenv("APPDATA");   
    
    System.out.println(appdata);
    
    
    String dataFolder = System.getProperty("user.home") + "\\Local Settings\\ApplicationData";
    
    System.out.println(dataFolder);
    
    
    String dataFolder2 = System.getenv("LOCALAPPDATA");
    

    System.out.println(dataFolder2);

在我的电脑上,它给出:

C:\Users\develop2\AppData\Roaming

C:\Users\develop2\Local Settings\ApplicationData

C:\Users\develop2\AppData\Local

看到这个:What is the cross-platform way of obtaining the path to the local application data directory?

  • 它适用于所有人,原则相同,但您可能会遇到安全问题

像这样:

String programdata = System.getenv("PROGRAMDATA");
System.out.println(programdata);
String allusersprofile = System.getenv("ALLUSERSPROFILE");
System.out.println(allusersprofile); // same thing !
String publicdir = System.getenv("PUBLIC");
System.out.println(publicdir);

【讨论】:

  • 好的,非常感谢,我将使用绝对字符串路径将我的对象保存到应用程序的数据文件夹中
猜你喜欢
  • 1970-01-01
  • 2017-08-05
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 2017-12-25
相关资源
最近更新 更多