android - file.exists() 在 Android 中总是失败

标签 android filepath

我正在处理音频视频合并,一切正常。合并文件后,它会保存在指定路径中。这个路径被传递给我们在 onActivityResult 中获得的另一个 Activity ,这个文件在 videoView 中播放。

一切正常,只有一件事导致我呆在一个地方。这是在我的 onAcitivityResult 中,我得到了指定的路径,在日志中检查了它,但是在查找文件时,我的 file.exists() 总是返回 null。

我可以看到我的文件存储在正确的路径中,但我不知道为什么它不工作。我在另一个 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

在日志中您可以清楚地看到文件路径在那里,但是 if 语句没有得到执行

而且我已经检查了设备内存中的文件,它在那里并保存了我可以播放它,文件工作正常。

请大家多提宝贵意见,让我走得更远。谢谢

此外,我在我的 list 中拥有WRITE_EXTERNAL_DATAREAD_EXTERNAL_DATA 的权限。

编辑

我已经成功实现了,问题出在路径名上,路径名没有指定正确,所以出现了问题。否则它工作正常。感谢您的大力支持。我已经吸取教训了。

最佳答案

尝试只给出音频文件的名称作为参数,即

File myFile = new File(audioFilename);

我曾经遇到过同样的问题并且它有效。听起来很奇怪,但确实有效。

关于android - file.exists() 在 Android 中总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45839088/

相关文章:

android - 使用 Gradle 将应用程序模块依赖项添加到 Android Studio 中的另一个应用程序模块中

android - 如何设置 PopupMenu 样式?

java - 如何对编程特别是 java 和 android 产生兴趣

windows - 语法错误使用 Windows 替换 ("\\"、 "\") 来替换 Python 中的文件路径

java - Bufferedreader 和文件路径 - 简单

javascript - 从 Electron 中的 SaveFileDialog 获取创建的文件的路径

python - 给定文件路径时查找最高深度

ios - 将文件路径转换为文件 url[NSUrl]

android - Undefined 不是一个对象(评估 'Sn[e]' )

java - onActivityResult 未在 MainActivity.Java 中调用