Десериализация объекта - как действовать? - PullRequest
0 голосов
/ 22 июня 2019

В IntelliJ я создал объект Trie и сериализовал его в файл с именем «t.txt».Я переместил этот файл в тот же каталог, что и мой файл MainActivity.java в Android Studio, и запустил этот код, чтобы попытаться получить объект:

String fileName = "t.txt";
Trie trie = null;
try {
     FileInputStream fis = new FileInputStream(fileName);
     ObjectInputStream ois = new ObjectInputStream(fis);
     trie = (Trie) ois.readObject();
     ois.close();
}
catch(IOException e) {
     System.out.println(e);
}
catch(java.lang.ClassNotFoundException e) {
     System.out.println(e);
}

Это дает мне ошибку «файл не найден», указывающий на этоне может быть открытОднако этот же код прекрасно работает в IntelliJ.

Как мне восстановить этот объект из t.txt в Android Studio?

1 Ответ

0 голосов
/ 22 июня 2019

Вот альтернатива. Сериализуйте файл до getFilesDir() и получите его оттуда. Таким образом, вам будет легко сериализовать и десериализовать.

Чтобы проверить, существует ли файл в getFilesDir():

boolean doesMyFileExists(Activity activity, String fileName) {
    File[] files = activity.getFilesDir().listFiles();
    for(File i: files) {
        if(i.getName().equals(fileName)) {
            return true;
        }
    }
    return false;
}



Для сериализации объекта (MyObject):

void serializeObject(Activity activity, MyObject myObject, String fileName){
    try {
        FileOutputStream fos = activity.openFileOutput(fileName, Context.MODE_PRIVATE);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(myObject);
        oos.close();
        fos.close();
    }
    catch(Exception e) {
        //Catch all possible exceptions here
    }

 }



Для десериализации объекта (MyObject):

MyObject deserializeObject(Activity activity, String fileName){
    try {
        return ((MyObject) (new ObjectInputStream(activity.openFileInput(fileName)).readObject()););
    }
    catch(Exception e) {
        //Catch all possible exceptions here
    }

 }


ПРИМЕЧАНИЕ. Класс, содержащий эти методы, должен реализовывать интерфейс Serializable.



Надеюсь, это поможет, веселое кодирование!

...