【问题标题】:Unable to read file from sd card in Android无法在 Android 中从 sd 卡读取文件
【发布时间】:2015-03-24 10:57:18
【问题描述】:

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

     f = new RandomAccessFile("/storage/sdcard0/trac.txt", "r");

但应用程序在这样做时崩溃了。我能够在 sdcard 中创建和写入文件,但无法读取它。 我的清单中有以下权限,我将其作为系统应用程序运行:

    <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>

【问题讨论】:

  • 发布崩溃日志。你确定路径正确吗?
  • 我试图记住确切的细节,但我相信如果你在与系统共享的用户 ID 下运行,你将被禁止使用外部存储,因为与进程被杀死有关的遗留原因卸载时——所以你可以在一个普通的应用程序中测试这段代码,看看它是否在那里工作。更一般地说,您应该在运行时确定存储路径,而不是猜测它。显示您似乎暗示有效的编写代码会很有帮助,并且已经请求了崩溃的实际日志。

标签: java android file file-handling


【解决方案1】:

尝试通过以下方式获取您的 sd 卡路径:

String yourpath = Environment.getExternalStorageDirectory()
                             .getAbsolutePath() + "/folderName/";

【讨论】:

  • 返回 /storage/emulated/0 而不是 /sdcard
【解决方案2】:
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();
            }

它对我很有帮助。 更详细:

How to read a selected text file from sdcard on android

【讨论】:

  • 扔掉你从某个地方剪切和粘贴的随机对比示例(无论是在线资源还是你自己的作品)对于解决发帖者的特定问题并没有多大帮助。
猜你喜欢
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多