在android中存储外部存储和内部存储上的文件

时间:2014-04-02 05:40:56

标签: android file-io android-external-storage

我正在android中做一个OCR应用程序。为此,我需要将训练过的数据和图像存储在我的应用程序文件夹中。到现在为止我一直在使用

public static String DATA_PATH = Environment.getExternalStorageDirectory().toString() + "/NewsReader/"

并且在具有外部SD卡的设备上完全正常。

但是当我尝试在没有插入SD卡的设备上运行相同的应用程序并且在内部存储或像Nexus这样只有内部存储的设备上工作时,应用程序失败了。我在这里有什么替代品。我可以检查外部存储的状态以查看它是否可用但是如果不是那么我的应用程序应该做什么而不是崩溃。我甚至试过getFilesDir().toString() + "/NewsReader/",但结果相同。

修改

从一些答案中我得到的上述问题并不能说明我的真正问题是什么让我更清楚。

我这样做:public static String DATA_PATH = Environment.getExternalStorageDirectory().toString() + "/NewsReader/" 当我在具有外部SD卡的设备上运行时,它完美地创建了手机中的文件夹NewsReader。但无法在仅具有内部存储的设备上运行。 目前我正在添加所有这个文件在一个线程中的我的splsh活动中创建业务但是之前当我在我的正常活动OnCreate中执行相同的代码时,它曾经在所有设备上运行。

4 个答案:

答案 0 :(得分:0)

请阅读此内容我希望能帮助您http://developer.android.com/guide/topics/data/data-storage.html

您可以使用SharedPreferences:

保存数据:

SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
 editor.putString("text", mSaved.getText().toString());
 editor.putInt("selection-start", mSaved.getSelectionStart());
 editor.putInt("selection-end", mSaved.getSelectionEnd());
 editor.commit();

要检索数据:

SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
String restoredText = prefs.getString("text", null);
int selectionStart = prefs.getInt("selection-start", -1);
int selectionEnd = prefs.getInt("selection-end", -1);

答案 1 :(得分:0)

如果没有外部存储,则无法存储在外部存储中,这是合乎逻辑的。您可以检查设备是否具有外部存储。

如果没有,则必须将数据存储在内部存储中。

`String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        //do your code for external storage
    }else {
        //for internal storage
    }`

答案 2 :(得分:0)

您必须首先通过以下代码检查外部存储器是否存在天气:

/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
    Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
    return true;
}
return false;}

您可以使用内部存储。 内部存储可以通过以下代码使用:

File internal_storagefile = new File("/data/YourPackageName/files/abc.jpg");

您甚至可以通过以下方式获取内部存储路径:

File internalPath = File("/data/" + getApplicationContext().getPackageName() + "/");

来源:Android Storage Options

谢谢。

答案 3 :(得分:0)

Environment.getExternalStorageState() returns path to internal SD mount point like "/mnt/sdcard"

不,Environment.getExternalStorageDirectory()指设备制造商认为是“外部存储”的任何内容。在某些设备上,这是可移动媒体,如SD卡。在某些设备上,这是设备上闪存的一部分。这里,“外部存储”是指“安装在主机上时通过USB大容量存储模式可访问的内容”,至少对于Android 1.x和2.x. 但问题是关于外部SD。如何获得像“/ mnt / sdcard / external_sd”这样的路径(它可能因设备而异)?

Android has no concept of "external SD", aside from external storage, as described above.

如果设备制造商选择将外部存储设备作为板载闪存并且还具有SD卡,则需要与该制造商联系以确定是否可以使用SD卡(不保证)以及规则用于使用它,例如使用它的路径。

https://stackoverflow.com/a/5695129/596555
https://stackoverflow.com/a/15131810/596555