Android打开文件

zSt*_*zSt 13 android file

我试图打开一个文件进行阅读.

使用时: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 将导致扫描程序处理字符串的内容,即将其解释为要扫描的实际内容而不是要打开的文件的名称.


Kni*_*edi 9

几分钟前,这让我疯狂.我忘记将此行添加到清单:

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