我试图打开一个文件以进行读取。
当使用:Scanner input = new Scanner(filename);
时,无法找到该文件。
但是当我使用:
InputStream in = openFileInput(filename);
Scanner input = new Scanner(in);
它起作用了。第一行代码为什么是错误的?
文件存储在设备上的特定位置,这是我认为openFileInput
在文件名开头添加的内容。最终结果(位置+文件名)构造如下:
/data/data/<application-package>/files/<file-name>
需要注意的是,文档中指出openFileInput
参数不能包含路径分隔符。
为避免将位置路径硬编码到代码中,因为这可能在不同设备上甚至是不同的,您可以通过调用getFilesDir
获得一个指向存储目录的File
对象,并使用它来读取任何想要的文件。例如:
File filesDir = getFilesDir();
Scanner input = new Scanner(new File(filesDir, filename));
请注意,通过将String
作为参数传递来构建Scanner
对象将导致该扫描器处理该字符串的内容,即将其解释为要扫描的实际内容,而不是作为要打开的文件名。
刚才这个问题让我疯狂了几分钟。我忘记在清单文件中添加以下行:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Scanner sc = new Scanner(new File(filename));