java.io.FileNotFoundException(尝试反序列化)

java.io.FileNotFoundException(尝试反序列化),java,android,file,io,Java,Android,File,Io,我正在尝试将XML文件反序列化为对象。 我的代码在线路上失败: new FileInputStream(mySearch) 使用java.io.FileNotFoundException 因此,我添加了:if(exists)块以查看是否可以通过其他方式找到该文件 我已经在谷歌上搜索了这个错误,并阅读了其他的讨论线索。基于这些讨论,我尝试了五种不同的指定文件路径和名称的方法。(请参阅已注释的尝试) 所需的行为是,我找出路径和文件名语法的错误,以便找到并反序列化文件 import android.

我正在尝试将XML文件反序列化为对象。 我的代码在线路上失败:

new FileInputStream(mySearch)
使用
java.io.FileNotFoundException

因此,我添加了:if(exists)块以查看是否可以通过其他方式找到该文件

我已经在谷歌上搜索了这个错误,并阅读了其他的讨论线索。基于这些讨论,我尝试了五种不同的指定文件路径和名称的方法。(请参阅已注释的尝试)

所需的行为是,我找出路径和文件名语法的错误,以便找到并反序列化文件

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());
}

}

Android emulator无法访问主机的文件系统。您可以将XML文件捆绑到
项目\u 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

Android emulator无法访问主机的文件系统。您可以将XML文件捆绑到
项目\u 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

打开
cmd
窗口,切换到该目录,键入
dir
;然后将输出复制/粘贴到问题中(使用代码格式),而不是尝试不同的方式指定文件名,您是否确实验证了文件存在?例如,在命令行上运行
dir C:\Users\Terence\Documents\冥想Lemniscate\Test\u Single.xml
。这些路径看起来像Windows路径,但您的代码使用Android库,它在哪里运行?@Andreas-dir命令显示文件存在并显示其大小。打开
cmd
窗口,更改到该目录,键入
dir
;然后将输出复制/粘贴到问题中(使用代码格式),而不是尝试不同的方式指定文件名,您是否确实验证了文件存在?例如,在命令行上运行
dir C:\Users\Terence\Documents\冥想Lemniscate\Test\u Single.xml
。这些路径看起来像Windows路径,但您的代码使用Android库,它在哪里运行?@Andreas-dir命令显示文件存在并显示其大小。我在“res”下创建了一个“xml”文件夹,并将文件放入其中。现在我在(R.xml.Test_Single)下面得到了一条红色的曲线,消息是:“expected resource of type Raw”。如果您计划使用自己的解码器将其作为原始资源读取,请尝试将其放入
Raw
子目录,而不是
xml
。现在,出于某种原因,无论我在哪里使用“(R…”,它都会高亮显示为红色,并显示“无法解析符号R”。根据您的建议@jspcal,我现在正在尝试:“InputStream=getResources().getString(R.xml.Test_1_gend);”但是,它高亮显示为红色,并显示:无法解析符号xml我将xml文件放入\res\xml下的文件夹中注册xml文件还需要做什么吗?我创建了一个“xml文件”“res”下的文件夹,并将文件放入其中。现在我在(R.xml.Test_Single)下面得到了一条红色的曲线,消息是:“expected resource of type Raw”。如果您计划使用自己的解码器将其作为原始资源读取,请尝试将其放入
Raw
子目录,而不是
xml
。现在,出于某种原因,无论我在哪里使用“(R…”,它都会高亮显示为红色,并显示“无法解析符号R”。根据您的建议@jspcal,我现在正在尝试:“InputStream=getResources().getString(R.xml.Test_1_gend);”但是,它高亮显示为红色,并显示:无法解析符号xml我将xml文件放入\res\xml下的文件夹中是否需要执行其他操作来注册xml文件?