Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
I';我试图检索存储在Android设备内部存储器中的文件,但我可以';我找不到_Android_File_Directory - Fatal编程技术网

I';我试图检索存储在Android设备内部存储器中的文件,但我可以';我找不到

I';我试图检索存储在Android设备内部存储器中的文件,但我可以';我找不到,android,file,directory,Android,File,Directory,我已将文件写入内部存储器。它显示在我的“data/data/package name/file”文件夹中。当我签入此目录时,它存在。但是在下面的代码中,当我键入file file=new file(fileName)时,file.exists()显示为false。有人能告诉我为什么吗 fileName = "match." + mMatchID + ".json"; Log.d(TAG1, "Filename: " + fileName); // the file name is ok

我已将文件写入内部存储器。它显示在我的“data/data/package name/file”文件夹中。当我签入此目录时,它存在。但是在下面的代码中,当我键入file file=new file(fileName)时,file.exists()显示为false。有人能告诉我为什么吗

fileName = "match." + mMatchID + ".json";

Log.d(TAG1, "Filename: " + fileName);   // the file name is ok


File file = new File(fileName);

Log.d(TAG1, "Does File Exist: " + file.exists());

Gson gson = new Gson();


if (file.exists()) {
    // read file into memory and assign the string to matchString
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new FileReader(fileName));
        matchString = reader.readLine();

        Log.d(TAG1, "When you read the match back into memory: " + matchString);


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

        Log.d(TAG1, "an error occured:" );
    } finally{
        try {
            assert reader != null;
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    match = gson.fromJson(matchString, Match.class);
}


match.setMatchName(mMatchNameEditText.getText().toString());
match.setMatchLevel(mSpinner.getSelectedItem().toString());

// convert match back to JSON
matchString = new Gson().toJson(match);

FileOutputStream fos = null;

try {
    fos = openFileOutput(fileName, MODE_PRIVATE);
    fos.write(matchString.getBytes());
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        assert fos != null;
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Toast.makeText(EditMatchActivity.this, "Match Updated", Toast.LENGTH_SHORT).show();
}

SharedPreferences.Editor editor = getSharedPreferences(MY_GLOBAL_PREFS, MODE_PRIVATE).edit();
editor.putString(CURRENT_MATCH_NAME, mMatchNameEditText.getText().toString());
String level = mSpinner.getSelectedItem().toString();
editor.putString(CURRENT_MATCH_LEVEL, level);
editor.apply();
以下是堆栈跟踪中的证据:

08-22 14:17:50.674 2883-2883/com.checkinsystems.ez_score D/EditMatchActivity: Filename: match.08222017PGA5614023.json
08-22 14:17:50.674 2883-2883/com.checkinsystems.ez_score D/EditMatchActivity: Does File Exist: false
08-22 14:17:50.703 2883-3109/com.checkinsystems.ez_score D/EGL_emulation: eglMakeCurrent: 0x7f92842e1d20: ver 2 0 (tinfo 0x7f92842c2f00)
08-22 14:17:50.710 2883-3109/com.checkinsystems.ez_score D/EGL_emulation: eglMakeCurrent: 0x7f92842e1d20: ver 2 0 (tinfo 0x7f92842c2f00)
08-22 14:17:52.684 2883-3109/com.checkinsystems.ez_score E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f92842e25e0
“match.+mMatchID+”.json“
是一个简单的文件名。它不是文件的完全限定路径

您需要首先使用与您创建该文件的方式相匹配的代码检查
文件
。如果使用
getFilesDir()
openInputStream()
创建该文件,则使用
新建文件(getFilesDir(),“match.”+mMatchID+“.json”)
创建相应的
文件
。“+mMatchID+”.json“
是一个简单的文件名。它不是文件的完全限定路径


您需要首先使用与您创建该文件的方式相匹配的代码来检查
文件。如果您使用
getFilesDir()
openInputStream()
创建该文件,则使用
新文件(getFilesDir(),“match.”+mMatchID+“.json”)
创建相应的
文件

谢谢。这解决了一个问题,但我可能有一个类似的问题。这两行现在抛出一个错误:reader=newbufferedreader(newfilereader(fileName));matchString=reader.readLine();Log.d(TAG1,“当您将匹配读回内存时:“+matchString”);你给我的第一个补丁成功了。我找到了文件,但这行代码表示没有这样的文件或directory@HelpMeI'mStupid:同样,您需要使用文件的完全限定路径。您的
FileReader
需要传递我的答案中显示的
文件。当我尝试FileReader(getfiledir(),fileName)时,它不起作用。它抛出了一个错误。但是,当我将File对象传递给FileReader时,它确实起了作用。真奇怪。当您查找文档时,它会说我可以将文件名或文件对象传递给FileReader,但在本例中,它仅在我传递文件对象时起作用。这里一定有什么我遗漏了。至少它起作用了。谢谢你的帮助。我还是希望我能理解为什么这会成为一个difference@HelpMeI'mStupid:“当我尝试FileReader(getFileDir(),fileName)时,它不起作用。它抛出了一个错误”--没有采用两个参数的
FileReader
构造函数。“当您查找文档时,它说我可以将文件名或文件对象传递给FileReader,但在本例中,它只在我传递文件对象时起作用”——正如我之前说过两次,这里也说过一次:您需要使用文件的完全限定路径。文件名本身是无用的。再次感谢。我现在明白了。我想让我感到困惑的一点是,创建文件时不需要完全限定的路径。我想这是openFileOutput(filename)方法的一个优点。再次感谢。我现在明白了:)谢谢。这解决了一个问题,但我可能有一个类似的问题。这两行现在抛出一个错误:reader=newbufferedreader(newfilereader(fileName));matchString=reader.readLine();Log.d(TAG1,“当您将匹配读回内存时:“+matchString”);你给我的第一个补丁成功了。我找到了文件,但这行代码表示没有这样的文件或directory@HelpMeI'mStupid:同样,您需要使用文件的完全限定路径。您的
FileReader
需要传递我的答案中显示的
文件。当我尝试FileReader(getfiledir(),fileName)时,它不起作用。它抛出了一个错误。但是,当我将File对象传递给FileReader时,它确实起了作用。真奇怪。当您查找文档时,它会说我可以将文件名或文件对象传递给FileReader,但在本例中,它仅在我传递文件对象时起作用。这里一定有什么我遗漏了。至少它起作用了。谢谢你的帮助。我还是希望我能理解为什么这会成为一个difference@HelpMeI'mStupid:“当我尝试FileReader(getFileDir(),fileName)时,它不起作用。它抛出了一个错误”--没有采用两个参数的
FileReader
构造函数。“当您查找文档时,它说我可以将文件名或文件对象传递给FileReader,但在本例中,它只在我传递文件对象时起作用”——正如我之前说过两次,这里也说过一次:您需要使用文件的完全限定路径。文件名本身是无用的。再次感谢。我现在明白了。我想让我感到困惑的一点是,创建文件时不需要完全限定的路径。我想这是openFileOutput(filename)方法的一个优点。再次感谢。我现在明白了:)