0

Я делаю программу, которая должна сохранить объекты для извлечения в будущем. Программа будет выдана в виде файла jar для разных людей.Сохранение экземпляров с сериализацией

Я уже могу хранить и извлекать экземпляры классов при предоставлении объекту ввода/вывода потока абсолютного пути (String) в качестве параметра. Я также могу сохранить изображения и текстовые файлы в папке ресурсов и получить его как ресурс с getClass().getResource(String path).

В чем проблема: Я пробовал каждый способ сохранить/получить объекты в/из папки ресурсов. Это очень странно, когда дело касается URL-адресов и файлов, а не обычных строк. Может кто-нибудь, пожалуйста, помогите мне? Мне нужно иметь возможность сохранять и извлекать объекты относительно пути к классам, чтобы я мог обращаться к объектам, когда программа представляет собой файл jar, сохраненный в разных путях на компьютере.

+0

Рассмотрите путь к классу, который состоит только из файлов jar только для чтения. Файлы, прочитанные и сохраненные пользователем, не должны загружаться в качестве ресурсов загрузчиком классов. Они должны быть загружены как файлы, используя файл IO. Class.getResource() полезен для ресурсов только для чтения, встроенных в приложение (значок вашего приложения, экран заставки и т. Д.) –

ответ

0

1: папка ресурса (в банке) доступна только для чтения.

Вы можете создавать данные, хранить в банке, когда вы упаковываете, но после этого закончено: только до читайте.

2: так что вы хотите, чтобы пользователь мог читать и писать (и он не встроен в ваше приложение).

  • если это личные ДАННЫЕ, вы можете использовать (для ПК):

    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

Хорошо, спасибо, я просто сохраню свои объекты в папках данных приложения, используя абсолютную строку дорожка –