安卓如何打开文件?

13

我试图打开一个文件以进行读取。

当使用:Scanner input = new Scanner(filename); 时,无法找到该文件。

但是当我使用:

InputStream in = openFileInput(filename);
Scanner input = new Scanner(in);

它起作用了。第一行代码为什么是错误的?

3个回答

11

文件存储在设备上的特定位置,这是我认为openFileInput在文件名开头添加的内容。最终结果(位置+文件名)构造如下:

/data/data/<application-package>/files/<file-name>

需要注意的是,文档中指出openFileInput参数不能包含路径分隔符

为避免将位置路径硬编码到代码中,因为这可能在不同设备上甚至是不同的,您可以通过调用getFilesDir获得一个指向存储目录的File对象,并使用它来读取任何想要的文件。例如:

File filesDir = getFilesDir();
Scanner input = new Scanner(new File(filesDir, filename));

请注意,通过将String作为参数传递来构建Scanner对象将导致该扫描器处理该字符串的内容,即将其解释为要扫描的实际内容,而不是作为要打开的文件名。


谢谢!我一开始使用了错误的构造函数 :P.. 然后我试图使用Scanner sc = new Scanner(new File(filename)); 但它没有起作用... File filesDir = getFilesDir(); Scanner input = new Scanner(new File(filesDir, filename)); 这个很好用 :D - zSt

9

刚才这个问题让我疯狂了几分钟。我忘记在清单文件中添加以下行:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我会期望看到一个“权限被拒绝”的消息。但是却得到了一个“文件未找到”的消息...
在你的情况下,`openFileInput` 打开了你的私有应用数据目录中的文件(`/data/data/your.package/filename`)。这永远不会失败。但是扫描器尝试在根路径上打开它。因此,如果您想从SD卡中读取文件,则需要使用 `Environement.getExternalStorageDirectory().getAbsolutePath() + "/" + filename`。

-6
Scanner sc = new Scanner(new File(filename));

10
请提供更多信息?乱扔代码对任何人都没有帮助... - WarrenFaith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接