java.io.FileNotFoundException (Попытка десериализации) - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь десериализовать файл XML в объект.Мой код завершается ошибкой в ​​строке:

new FileInputStream(mySearch)

с java.io.FileNotFoundException.

Итак, я добавил блок: если (существует), чтобы посмотреть, можно ли найти файл другим способом.

Я погуглил ошибку и прочитал другие темы обсуждения.Основываясь на этих обсуждениях, я попытался FIVE по-разному указать путь и имя файла.(См. Закомментированные попытки)

Желаемое поведение - выяснить, что не так с моим синтаксисом пути и имени файла, чтобы файл был найден и десериализован.

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.beans.XMLDecoder;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.File;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 5/20/2018 T. Pfaff - Added XMLDecoder Deserialization of XML file into EquationLib/LibSets/EquationSet

    //===========================================================================================
    //Below are the FIVE different ways that I've tried to get it to find the file

    String myFileStr = "C:\\Users\\Terence\\Documents\\Meditate-Lemniscate\\Test_Single.xml";
    //String myFileStr = "c:\\users\\terence\\documents\\meditate-lemniscate\\test_single.xml";
    //String myFileStr = "C:/Users/Terence/Documents/Meditate-Lemniscate/Test_Single.xml";
    //String myFileStr = "c:/users/terence/documents/meditate-lemniscate/test_single.xml";
    //String myFileStr = "Test_Single.xml";

    //===========================================================================================

    String myEqSetName = "";
    Integer myCnt = 0;
    EquationLib equationLib = new EquationLib();
    TextView myTV = (TextView) findViewById(R.id.myTextView);

    //=============================================================================
    //This block of code ALWAYS results in "Does NOT Exist"
    //no matter which value I use for myFileStr

    File mySearch = new File(myFileStr);
    boolean exists = mySearch.exists();

    if (exists) {
        myTV.setText("YES EXISTS: " + myFileStr);
    } else {
        myTV.setText("Does NOT Exist: " + myFileStr);
    }
    //==============================================================================


    XMLDecoder decoder=null;

    // The first statement in the try block throws the exception:
    //java.io.FileNotFoundException: C:\Users\Terence\Documents\Meditate-Lemniscate\Test_Single.xml (No such file or directory)

    try{
        FileInputStream myFileIS = new FileInputStream(mySearch);
        decoder = new XMLDecoder(new BufferedInputStream(myFileIS));
        equationLib = (EquationLib) decoder.readObject();

        myCnt = equationLib.libSets.size();
        myEqSetName = equationLib.libSets.get(0).equationSet.name;

    } catch (Exception e){
        e.printStackTrace();
    }

    //myTV.setText(myCnt.toString());
}

}

1 Ответ

0 голосов
/ 23 мая 2018

Эмулятор Android не имеет доступа к файловой системе хоста.Вы можете связать файл XML в папку project_root\res\raw\ и затем открыть его как ресурс:

// Open project_root\res\raw\my_file.xml

InputStream stream = getResources().openRawResource(R.raw.my_file);

Или скопировать его в хранилище виртуального устройства и затем открыть локальный путь:

adb push C:\Temp\my_file.xml /sdcard/my_file.xml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...