【问题标题】:Unable to read file from the Downloads folder for an android app无法从 Android 应用程序的“下载”文件夹中读取文件
【发布时间】:2013-06-17 02:37:17
【问题描述】:

我想为存储在手机下载文件夹中的文件创建一个输入流。 早些时候,我将所需的文件作为资产,并使用以下代码阅读它:

InputStream fin;
fin = getAssets().open(FILENAME);

但是现在我希望能够将存储在我的下载文件夹/mnt/sdcard/Download 中的文件作为 InputStreamNOT 作为 FileInputStream 对象打开。我正在使用一个只需要 InputStream 作为参数的库,所以我不能使用 FileInputStream 方法,因为如果我这样做并且应用程序停止,我会得到 fatal exception

我该怎么做?我试图从文档中找到一些辅助函数,但找不到。

编辑:我也尝试将代码编辑到这个-

String path = "/mnt/sdcard/Download"+FILENAME;
fin = new BufferedInputStream(new FileInputStream(path));

但是,当我尝试读取文件时,应用程序仍然崩溃。

【问题讨论】:

  • 试试这个:AssetManager am = context.getAssets();InputStream fin = am.open(FILENAME); 或者你也可以这样尝试:InputStream fin = openFileInput(FILENAME);
  • 感谢您的回复@g00dy。但我认为函数openFileInput 返回一个FileInputStream 而不是我想要的InputStream。如果您详细说明您的第一个解决方案,我将不胜感激。
  • 看起来您是 Java 面向对象的新手。每个 FileInputStream 都是一个 InputStream,因为它是 FileInputStream 的一个超类。在 Eclipse 中选择 FileInputStream 文本并按 F4。然后你就可以自己看结构了。

标签: android file-io inputstream


【解决方案1】:

我遇到了和你一样的问题:

AssetManager am=getAssets();
InputStream is=am.open("file1.xls");
InputStream is = new FileInputStream(filepath);
Workbook wb = Workbook.getWorkbook(is);

这里我曾经从assets文件夹访问file1.xls。

我通过使用修复它:

File filepath = newFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+"/"+"file1.xls");  // fist part gets the directory of download folder and last part is your file name
InputStream is = new FileInputStream(filepath);
Workbook wb = Workbook.getWorkbook(is);

不要忘记先获得存储权限才能访问存储。

【讨论】:

    最近更新 更多