在android中放置文件的位置可以打开吗?

时间:2017-01-12 20:26:17

标签: android

我想使用以下代码在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的位置?我发现了一些矛盾的来源,例如thisthis?怎么做正确?

更新

我希望能够在安装应用程序后随时替换此文件。所以这个文件不是源代码或任何东西的一部分。它包含动态数据......

我会使用一个简单的“文件选择器”,因此用户可以在Android手机上的任何位置导航到该文件,但这看起来非常复杂和繁琐。所以,就目前而言,我只想打开一个文件,我可以用最简单的方式将电话放在手机上...

3 个答案:

答案 0 :(得分:0)

为了能够访问文件,您应该将其放在/app/src/main/assets/examplelist.txt中。您可以在Android Studio中的Project explorer中访问此目录。

要从java代码打开文件,您可以通过调用InputStream

来创建getAssets().open("examplelist.txt")对象

答案 1 :(得分:0)

解决此问题的一种可能方法如下:

  1. 您将文件放在根类型文件夹中,该文件夹可能具有以下路径:/storage/emulated/0(这是您在连接设备时可以看到的位置,例如Linux并打开它在文件资源管理器中)。

  2. 您可以使用以下代码打开文件的内容:

    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();
     }
    
  3. 非常重要,我忘记了每次:您必须设置应用程序的权限才能访问存储空间。您必须将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()