file.exists() 在 Android 中总是失败
file.exists() always fails in Android
我正在处理音频视频合并,一切正常。合并文件后,它会保存在指定路径中。这个路径被传递给我们在 onActivityResult 中获得的另一个 activity 并且这个文件在 videoView 中播放。
一切正常,只有一件事导致我呆在一个地方。这是在我的 onAcitivityResult 中,我得到了指定的路径,在日志中检查了它,但是当要查找文件时,我的 file.exists() 总是 return 空。
我可以看到我的文件存储在正确的路径中,但我不知道为什么它不工作。我在另一个 activity 中使用了 file.exists() 并且它工作正常但在这个 activity.
中没有
我已尽一切可能解决我的问题并在互联网上查看但没有结果。
我尝试过的是:
File file = new File(customVideoPath);
if(file.exists()){
//do something
}else
//do something
我也试过这个:
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath + customVideoPath);
这是我认为可行但没有奏效的另一种解决方案:
File file = new ("/mnt"+customVideoPath);
一直到else条件,没有执行想要的功能
来到我发送数据的代码:
文件以路径形式传递
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Intent intent = new Intent();
intent.putExtra("addedAudioFile",s); //for single file no array is passed right now
Log.e("AUDIO_VIDEO FILE=====",s);
setResult(RESULT_OK,intent);
finish();
}
这是异步任务的一部分。现在我接收文件的另一个 activity 是:
//getting the files after adding some changes to the selected video
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case CustomizeVideo:
if (resultCode == RESULT_OK) {
String customVideoReceived = data.getExtras().getString("addedAudioFile");
Log.e("GETTING IT=====", customVideoReceived);
File file = new File(customVideoReceived);
Log.e("FILE_CHECK",file.toString());
if (file.exists()) {
//for starting the video activity
mVideoView.setVideoPath(customVideoReceived);
mController = new MediaController(EditVideoActivity.this);
mController.setMediaPlayer(mVideoView);
mVideoView.setMediaController(mController);
mVideoView.requestFocus();
mVideoView.start();
} else {
Toast.makeText(getApplicationContext(), "Cannot play the file!", Toast.LENGTH_SHORT)
.show();
Toast.makeText(getApplicationContext(), "File does not merged successfully", Toast.LENGTH_SHORT)
.show();
}
}
}
}
但我得到的只是 else 语句的实现
记录结果:
08-23 17:23:39.818 3369-3369/in.pinelane.myhovi E/AUDIO_VIDEO FILE=====: /storage/emulated/0/HovieAddTrack.mp4
08-23 17:23:39.831 3369-3369/in.pinelane.myhovi E/GETTING IT=====: /storage/emulated/0/HovieAddTrack.mp4
08-23 17:23:39.831 3369-3369/in.pinelane.myhovi E/FILE_CHECK: /storage/emulated/0/HovieAddTrack.mp4
在日志中您可以清楚地看到文件路径在那里,但是 in if 语句没有得到执行
并且我已经检查了设备内存中的文件,它已经保存并保存了我可以播放它,文件工作正常。
请大家多提宝贵意见,让我走得更远。谢谢
此外,我的清单中有 WRITE_EXTERNAL_DATA 和 READ_EXTERNAL_DATA 的权限。
编辑
我实现成功了,问题出在路径名,路径名没有指定正确所以出现了问题。否则它工作正常。感谢您的大力支持。我已经吸取教训了。
尝试只给出音频文件的名称作为参数,即
File myFile = new File(audioFilename);
我曾经遇到过同样的问题并且它有效。听起来很奇怪,但确实有效。
试试这个。
File sdDir = Environment.getExternalStorageDirectory();
File file = new File(sdDir + "filename")
if(file.exists()){
Log.e("FILE_CHECK","file exists" );
}
else
Log.e("FILE_CHECK","file dosen't exists");
我正在处理音频视频合并,一切正常。合并文件后,它会保存在指定路径中。这个路径被传递给我们在 onActivityResult 中获得的另一个 activity 并且这个文件在 videoView 中播放。
一切正常,只有一件事导致我呆在一个地方。这是在我的 onAcitivityResult 中,我得到了指定的路径,在日志中检查了它,但是当要查找文件时,我的 file.exists() 总是 return 空。
我可以看到我的文件存储在正确的路径中,但我不知道为什么它不工作。我在另一个 activity 中使用了 file.exists() 并且它工作正常但在这个 activity.
中没有我已尽一切可能解决我的问题并在互联网上查看但没有结果。
我尝试过的是:
File file = new File(customVideoPath);
if(file.exists()){
//do something
}else
//do something
我也试过这个:
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath + customVideoPath);
这是我认为可行但没有奏效的另一种解决方案:
File file = new ("/mnt"+customVideoPath);
一直到else条件,没有执行想要的功能
来到我发送数据的代码:
文件以路径形式传递
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Intent intent = new Intent();
intent.putExtra("addedAudioFile",s); //for single file no array is passed right now
Log.e("AUDIO_VIDEO FILE=====",s);
setResult(RESULT_OK,intent);
finish();
}
这是异步任务的一部分。现在我接收文件的另一个 activity 是:
//getting the files after adding some changes to the selected video
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case CustomizeVideo:
if (resultCode == RESULT_OK) {
String customVideoReceived = data.getExtras().getString("addedAudioFile");
Log.e("GETTING IT=====", customVideoReceived);
File file = new File(customVideoReceived);
Log.e("FILE_CHECK",file.toString());
if (file.exists()) {
//for starting the video activity
mVideoView.setVideoPath(customVideoReceived);
mController = new MediaController(EditVideoActivity.this);
mController.setMediaPlayer(mVideoView);
mVideoView.setMediaController(mController);
mVideoView.requestFocus();
mVideoView.start();
} else {
Toast.makeText(getApplicationContext(), "Cannot play the file!", Toast.LENGTH_SHORT)
.show();
Toast.makeText(getApplicationContext(), "File does not merged successfully", Toast.LENGTH_SHORT)
.show();
}
}
}
}
但我得到的只是 else 语句的实现
记录结果:
08-23 17:23:39.818 3369-3369/in.pinelane.myhovi E/AUDIO_VIDEO FILE=====: /storage/emulated/0/HovieAddTrack.mp4
08-23 17:23:39.831 3369-3369/in.pinelane.myhovi E/GETTING IT=====: /storage/emulated/0/HovieAddTrack.mp4
08-23 17:23:39.831 3369-3369/in.pinelane.myhovi E/FILE_CHECK: /storage/emulated/0/HovieAddTrack.mp4
在日志中您可以清楚地看到文件路径在那里,但是 in if 语句没有得到执行
并且我已经检查了设备内存中的文件,它已经保存并保存了我可以播放它,文件工作正常。
请大家多提宝贵意见,让我走得更远。谢谢
此外,我的清单中有 WRITE_EXTERNAL_DATA 和 READ_EXTERNAL_DATA 的权限。
编辑
我实现成功了,问题出在路径名,路径名没有指定正确所以出现了问题。否则它工作正常。感谢您的大力支持。我已经吸取教训了。
尝试只给出音频文件的名称作为参数,即
File myFile = new File(audioFilename);
我曾经遇到过同样的问题并且它有效。听起来很奇怪,但确实有效。
试试这个。
File sdDir = Environment.getExternalStorageDirectory();
File file = new File(sdDir + "filename")
if(file.exists()){
Log.e("FILE_CHECK","file exists" );
}
else
Log.e("FILE_CHECK","file dosen't exists");