我想使用以下代码在android中打开一个文件:
FileInputStream fis = openFileInput("examplelist.txt");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader bufferedReader = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
sb.append(line);
}
但是放置文件examplelist.txt
的位置?我发现了一些矛盾的来源,例如this和this?怎么做正确?
更新
我希望能够在安装应用程序后随时替换此文件。所以这个文件不是源代码或任何东西的一部分。它包含动态数据......
我会使用一个简单的“文件选择器”,因此用户可以在Android手机上的任何位置导航到该文件,但这看起来非常复杂和繁琐。所以,就目前而言,我只想打开一个文件,我可以用最简单的方式将电话放在手机上...
答案 0 :(得分:0)
为了能够访问文件,您应该将其放在/app/src/main/assets/examplelist.txt
中。您可以在Android Studio中的Project explorer中访问此目录。
要从java代码打开文件,您可以通过调用InputStream
getAssets().open("examplelist.txt")
对象
答案 1 :(得分:0)
解决此问题的一种可能方法如下:
您将文件放在根类型文件夹中,该文件夹可能具有以下路径:/storage/emulated/0
(这是您在连接设备时可以看到的位置,例如Linux并打开它在文件资源管理器中)。
您可以使用以下代码打开文件的内容:
String path = Environment.getExternalStorageDirectory().toString();
Log.d("Files", "Path: " + path);
String joinedPath = new File(path, "examplelist.txt").toString();
try {
FileInputStream fis =new FileInputStream(new File(joinedPath));
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader bufferedReader = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
sb.append(line);
}
Log.d("Text", sb.toString());
} catch (IOException e) {
Toast.makeText(getBaseContext(), "File does not exist", Toast.LENGTH_LONG).show();
}
非常重要,我忘记了每次:您必须设置应用程序的权限才能访问存储空间。您必须将permission
标记放在AndroidMainfest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
...
答案 2 :(得分:-1)
但在哪里放文件examplelist.txt?
您的应用会自行创建文件。 openFileInput()
是internal storage的一部分,普通用户无权访问。
我会使用一个简单的“文件选择器”,因此用户可以在Android手机上的任何位置导航到该文件,但这看起来非常复杂和麻烦。
第1步:使用startActivityForResult()
或ACTION_OPEN_DOCUMENT
ACTION_GET_CONTENT
致电Intent
(前者适用于Android 4.4 +)
步骤2:在onActivityResult()
中,如果您得到RESULT_OK
,请通过Uri
上的getData()
获取用户所选内容的Intent
传递到onActivityResult()
步骤3:致电openInputStream()
上的ContentResolver
以获取用于阅读内容的InputStream
大约有10-15行代码超过了你的问题,以及你的问题需要但未显示的代码(例如,I / O的后台线程)。
或者,使用a file chooser library。
我只是想以最简单的方式打开一个可以放在手机上的文件......
使用external storage,例如getExternalFilesDir()
。