我试图打开一个文件进行阅读.
使用时:Scanner input = new Scanner(filename);找不到该文件
但是当我用的时候:
InputStream in = openFileInput(filename);
Scanner input = new Scanner(in);
Run Code Online (Sandbox Code Playgroud)
有效.为什么第一行代码错了?
Giu*_*lli 11
文件存储在设备上的特定的,依赖于应用程序的位置,这是我想openFileInput在文件名的开头添加的.最终结果(位置+文件名)构造如下:
/data/data/<application-package>/files/<file-name>
Run Code Online (Sandbox Code Playgroud)
另请注意,文档声明该openFileInput参数不能包含路径分隔符.
为了避免硬编码位置路径(原则上甚至可能因设备而异),您可以File通过调用获取指向存储目录的对象getFilesDir,并使用它来读取您想要的任何文件.例如:
File filesDir = getFilesDir();
Scanner input = new Scanner(new File(filesDir, filename));
Run Code Online (Sandbox Code Playgroud)
请注意,Scanner通过传递a String作为参数来构造a 将导致扫描程序处理字符串的内容,即将其解释为要扫描的实际内容而不是要打开的文件的名称.
几分钟前,这让我疯狂.我忘记将此行添加到清单:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
我希望有一条许可被拒绝的消息.但只是找不到文件 ...
在您的情况下: openFileInput在您的私人应用程序数据目录(/data/data/your.package/filename)中打开一个文件.这绝不会失败.但是扫描程序试图在根路径上打开它.因此,当您想要从SD卡读取文件时,您将使用它Environement.getExternalStorageDirectory().getAbsolutePath() + "/" + filename.
| 归档时间: |
|
| 查看次数: |
48063 次 |
| 最近记录: |