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