Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
myFile.exists()在Android中无法正常工作_Android_File_File Io_Android Contentprovider - Fatal编程技术网

myFile.exists()在Android中无法正常工作

myFile.exists()在Android中无法正常工作,android,file,file-io,android-contentprovider,Android,File,File Io,Android Contentprovider,我有一段代码,用来检查MediaStore.Audio.Media内容提供商的SD卡中是否存储了mp3文件 问题是不管情况如何。SD卡上是否存在路径名存储在变量“audioFilename”中的文件。它总是返回“此文件不存在”作为结果。尽管变量audioFilename中存储了字符串路径名“/mnt/sdCard/Music/Jungle.mp3”,而且这个mp3文件实际上位于SD卡上。通过祝酒词和SD卡内容检查,易于证明 我可能在使用文件或环境类时出错。有人能看到这里显示的代码中有问题吗 /

我有一段代码,用来检查MediaStore.Audio.Media内容提供商的SD卡中是否存储了mp3文件

问题是不管情况如何。SD卡上是否存在路径名存储在变量“audioFilename”中的文件。它总是返回“此文件不存在”作为结果。尽管变量audioFilename中存储了字符串路径名“/mnt/sdCard/Music/Jungle.mp3”,而且这个mp3文件实际上位于SD卡上。通过祝酒词和SD卡内容检查,易于证明

我可能在使用文件或环境类时出错。有人能看到这里显示的代码中有问题吗

 // toast message to prove that the audioFilename is not null,
 // message displayed is the string, "File name: /mnt/sdCard/Music/Jungle.mp3"

 Toast.makeText(Editor.this, "File name: " + audioFilename,
 Toast.LENGTH_LONG).show();

 // the code below always returns "this file does not exist"

 File extStore = Environment.getExternalStorageDirectory();
 File myFile = new File(extStore.getAbsolutePath() + "audioFilename");

 if(myFile.exists()){

 Toast.makeText(Editor.this, "<<<< this file exists, it is: "+audioFilename+" >>>>",
 Toast.LENGTH_LONG).show();

 } else if(!myFile.exists()){

 Toast.makeText(Editor.this, "<<<< this file does not exist >>>> ",
 Toast.LENGTH_LONG).show();
 }

 Toast.makeText(Editor.this, "audio file name is: "+ audioFilename,
 Toast.LENGTH_LONG).show();
//证明audioFilename不为空的toast消息,
//显示的消息是字符串,“文件名:/mnt/sdCard/Music/Jungle.mp3”
Toast.makeText(Editor.this,“文件名:”+audioFilename,
Toast.LENGTH_LONG).show();
//下面的代码总是返回“此文件不存在”
文件extStore=Environment.getExternalStorageDirectory();
File myFile=新文件(extStore.getAbsolutePath()+“audioFilename”);
如果(myFile.exists()){
Toast.makeText(Editor.this,“>”,
Toast.LENGTH_LONG).show();
}如果(!myFile.exists()),则为else{
Toast.makeText(Editor.this,“>”,
Toast.LENGTH_LONG).show();
}
Toast.makeText(Editor.this,“音频文件名为:”+audioFilename,
Toast.LENGTH_LONG).show();

您需要在AndroidManifeat文件中添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

编辑:

File extStore = Environment.getExternalStorageDirectory();
File myFile = new File(extStore+ "/Music/Jungle.mp3"); <---- try this
String audioFilename =  "/sdcard/NewFolder/test1.jpg";

Toast.makeText(SimpleTest.this, "File name: " + audioFilename,
Toast.LENGTH_LONG).show();

// the code below always returns "this file does not exist"

File extStore = Environment.getExternalStorageDirectory();
File myFile = new File(audioFilename);

if(myFile.exists()){

    Toast.makeText(SimpleTest.this, "<<<< this file exists, it is: "+audioFilename+" >>>>",
    Toast.LENGTH_LONG).show();

} else if(!myFile.exists()){

    Toast.makeText(SimpleTest.this, "<<<< this file does not exist >>>> ",
    Toast.LENGTH_LONG).show();
}

Toast.makeText(SimpleTest.this, "audio file name is: "+ audioFilename,
Toast.LENGTH_LONG).show();
File extStore=Environment.getExternalStorageDirectory();

File myFile=新文件(extStore+“/Music/Jungle.mp3”) 我只是冒昧地猜测一下,假设您正在使用物理设备来测试您的应用程序。如果这是真的,您的外部存储可能不会被装载(因为您在计算机上使用USB存储),因此根据系统,文件实际上不存在。尝试在不插入USB线的情况下测试代码

编辑: 删除“audioFilename”周围的引号


您确定已导入java.io.File吗

尝试:

String pathsd = Environment.getExternalStorageDirectory()+"/";
// so var pathsd will return "/mnt/sdcard/"
// then you must sure var audioFilename is Music/Jungle.mp3
File myFile = new File(pathsd + audioFilename);
或者你确定你的路线?如果您不确定是否可以尝试提供直接字符串路径

File myFile = new File("/mnt/sdCard/Music/Jungle.mp3");

尝试更改此行

File myFile = new File(extStore.getAbsolutePath() + "audioFilename");

File myFile = new File(audioFilename);
我用相同的代码运行了这个测试,它运行得很好

下面是我测试的代码:

File extStore = Environment.getExternalStorageDirectory();
File myFile = new File(extStore+ "/Music/Jungle.mp3"); <---- try this
String audioFilename =  "/sdcard/NewFolder/test1.jpg";

Toast.makeText(SimpleTest.this, "File name: " + audioFilename,
Toast.LENGTH_LONG).show();

// the code below always returns "this file does not exist"

File extStore = Environment.getExternalStorageDirectory();
File myFile = new File(audioFilename);

if(myFile.exists()){

    Toast.makeText(SimpleTest.this, "<<<< this file exists, it is: "+audioFilename+" >>>>",
    Toast.LENGTH_LONG).show();

} else if(!myFile.exists()){

    Toast.makeText(SimpleTest.this, "<<<< this file does not exist >>>> ",
    Toast.LENGTH_LONG).show();
}

Toast.makeText(SimpleTest.this, "audio file name is: "+ audioFilename,
Toast.LENGTH_LONG).show();
String audioFilename=“/sdcard/NewFolder/test1.jpg”;
Toast.makeText(SimpleTest.this,“文件名:”+audioFilename,
Toast.LENGTH_LONG).show();
//下面的代码总是返回“此文件不存在”
文件extStore=Environment.getExternalStorageDirectory();
File myFile=新文件(audioFilename);
如果(myFile.exists()){
Toast.makeText(SimpleTest.this,“>”,
Toast.LENGTH_LONG).show();
}如果(!myFile.exists()),则为else{
Toast.makeText(SimpleTest.this,“>”,
Toast.LENGTH_LONG).show();
}
Toast.makeText(SimpleTest.this,“音频文件名为:”+audioFilename,
Toast.LENGTH_LONG).show();
希望对你有帮助


谢谢。

试着让第一个吐司显示被检查的实际位置,而不是您期望的位置。不要敬酒
“文件名:”+audioFilename
,而是敬酒
extStore.getAbsolutePath()+“audioFilename”
谢谢您的回复。我在我的Toast消息中尝试了这一点,它确实帮助我找出了代码不起作用的原因。如果没有这一点,我就看不清问题的原因。好的,回答和观察,但是在问问题之前,我已经在清单上添加了这一行。我应该提到这一点。我将尝试引用该项目,重新生成R.java生成的文件,看看这是否可行。有时xml文件会被卡住而不更新这是一个很好的猜测,我以前也遇到过这个问题。但现在我试着拔下插头。它仍然显示“文件不存在”,尽管该文件位于SD cardgood catch上。这也是一个我没有注意到的错误。如果我需要使用exStore.getAbsolutePath(),它就不会工作,因为有引号。但是,对于我使用exStore.getAbsolutePath()的代码来说,它本身就是一个错误,因此您指出的错误就像是原始错误下面的第二个错误维度。或者误差平方这就是我认为问题的方向。我不确定我是否正确地使用了文件构造函数“extStore.getAbsolutePath()+audioFilename”我不太理解其中的一部分。我会试试看它是否有效。“文件(“/mnt/sdCard/Music/Jungle.mp3”);“Hmmm如果要获取路径sdCard,可以使用Environment.getExternalStorageState(),因此将返回/mnt/sdCard以便您可以尝试,示例文件是/mnt/sdCard/tes.mp3:String pathsd=Environment.getExternalStorageState()+”/”;字符串filename=“tes.mp3”;File myFile=新文件(路径SD+文件名);或字符串pathsd=“/mnt/sdcard/”;字符串filename=“tes.mp3”;File myFile=新文件(路径SD+文件名);你回答的第二部分是正确的。我给你投了赞成票。上面普拉蒂克的回答直接指向了问题的原因。正如你所说。File myFile=新文件(“/mnt/sdCard/Music/Jungle.mp3”);将字符串或字符串变量直接放入其中,不添加“exStore.getAbsolutePath()”,效果很好。是的,这是正确的。在我的代码中,我使用了extStore.getAbsolutePath(),正如您所指出的,这就是问题所在。当我这样做时,完整的字符串是“/mnt/sdcard/mnt/sdcard/Jungle.mp3”,重复两次/mnt/sdcard/就是它不起作用的原因。现在它工作得很好。