Java 无法从Android中的sd卡读取文件

Java 无法从Android中的sd卡读取文件,java,android,file,file-handling,Java,Android,File,File Handling,我正在尝试使用以下代码从SD卡读取文件 f = new RandomAccessFile("/storage/sdcard0/trac.txt", "r"); 但应用程序在执行此操作时崩溃。我能够在SD卡中创建和写入文件,但无法读取。 我在清单中拥有以下权限,并且我正在将其作为系统应用程序运行: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-

我正在尝试使用以下代码从SD卡读取文件

     f = new RandomAccessFile("/storage/sdcard0/trac.txt", "r");
但应用程序在执行此操作时崩溃。我能够在SD卡中创建和写入文件,但无法读取。 我在清单中拥有以下权限,并且我正在将其作为系统应用程序运行:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"/>
<uses-permission android:name="android.permission.READ_MEDIA_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_SUPERUSER"></uses-permission>
<uses-permission android:name="android.permission.INJECT_EVENTS"></uses-permission>

尝试通过以下操作获取sd卡路径:

String yourpath = Environment.getExternalStorageDirectory()
                             .getAbsolutePath() + "/folderName/";
这对我很有帮助。 更详细地说:


发布崩溃日志。你确定路径正确吗?我正在努力记住确切的细节,但我相信,如果您在与系统共享的用户ID下运行,您将被禁止使用外部存储,因为旧的原因与卸载时被终止的进程有关-因此您可以在普通应用程序中测试此代码,看看它是否在那里工作。更一般地说,您应该在运行时确定存储路径,而不是猜测它。这将有助于显示您似乎在暗示工作的编写代码,以及已请求的实际崩溃日志。抛出您从某处剪切和粘贴的随机对比示例(无论是在线源代码还是您自己的工作)对于解决海报的特定问题没有多大帮助。这将返回/storage/simulated/0 not/sdcard
try {
                File myFile = new File("/sdcard/mysdfile.txt");
                FileInputStream fIn = new FileInputStream(myFile);
                BufferedReader myReader = new BufferedReader(
                        new InputStreamReader(fIn));
                String fileStr= "";
                String aBuffer = "";
                while ((fileStr= myReader.readLine()) != null) {
                    aBuffer += fileStr+ "\n";
                }
                txtData.setText(aBuffer);
                myReader.close();
                Toast.makeText(getBaseContext(),
                        "Done reading SD 'mysdfile.txt'",
                        Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
                Toast.makeText(getBaseContext(), e.getMessage(),
                        Toast.LENGTH_SHORT).show();
            }