2015-12-13 73 views
0

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

当给对象输入/输出流一个绝对路径(String)作为参数时,我可以存储和检索类的实例。 我也可以将图像和文本文件保存在资源文件夹中,并将其作为资源与getClass().getResource(String path)

这里是问题: 我已经尽可能的保存/从资源文件夹中获取对象。它真的很奇怪的处理URLS和文件,而不是普通的字符串。有人可以帮帮我吗?我需要能够保存和检索相对于类路径的对象,以便当程序是保存在计算机上不同路径中的jar文件时,我可以访问这些对象。

+0

请考虑仅由只读jar文件构成的类路径。由用户读取和保存的文件不应该由类加载器加载为资源。它们应该使用文件IO作为文件加载。 Class.getResource()对于嵌入在应用程序中的只读资源(你的应用程序图标,启动画面等)很有用 –

回答

0

1:资源文件夹(在jar中)是只读的。

您可以创建数据,当您打包时存储在jar文件中,但在完成后:仅对读取

2:所以你想用户可以读写(并且它不嵌入你的应用程序)。

  • 如果是个人DATAS,可以使用(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); 
+0

好的非常感谢你,我只是使用绝对字符串将我的对象保存到应用程序的数据文件夹中路径 –