Android 在安卓系统中,在何处放置文件以便打开?

Android 在安卓系统中,在何处放置文件以便打开?,android,Android,我想使用以下代码在android中打开一个文件: FileInputStream fis = openFileInput("examplelist.txt"); InputStreamReader isr = new InputStreamReader(fis); BufferedReader bufferedReader = new BufferedReader(isr); StringBuilder sb = new StringBuilder(); String line; w

我想使用以下代码在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);
 }
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();
 }
但是文件
examplelist.txt
放在哪里呢?我发现了一些矛盾的来源,比如和?如何正确地做

更新:

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


我会使用一个简单的“文件选择器”,这样用户就可以在android手机上的任何地方导航到该文件,但这看起来非常复杂和麻烦。所以,现在,我只想打开一个文件,我可以用最简单的方式把它放在手机的某个地方…

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

要从java代码中打开文件,可以通过调用
getAssets().open(“examplelist.txt”)

但是把examplelist.txt文件放在哪里呢

你的应用程序将创建文件本身
openFileInput()
是的一部分,普通用户无权访问

我会使用一个简单的“文件选择器”,这样用户就可以在android手机上的任何地方导航到该文件,但这看起来非常复杂和麻烦

步骤#1:使用
ACTION\u OPEN\u文档
ACTION\u GET\u内容
Intent
(前者适用于Android 4.4+)

步骤2:在
onActivityResult()
中,如果得到
RESULT\u OK
结果,则通过
onActivityResult()中传递的
意图
上的
getData()
Uri
获取到用户选择的内容

步骤3:在
ContentResolver
上调用
openInputStream()
,以获取用于读取内容的
InputStream

在你的问题上大约有10-15行代码,加上你的问题需要但没有显示的代码(例如,I/O的背景线程)

或者,使用

我只想打开一个文件,我可以把它放在手机上最简单的地方


使用,例如
getExternalFilesDir()

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

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

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

     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);
     }
    
    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"
        ...
    

    
    
    我使用的大多数应用程序似乎都在内部卡的根目录中创建了一个文件夹,然后用它来包含他们需要的任何文件。根目录在哪里?在我的手机上,它位于
    存储/模拟/0
    ,但我认为API公开了一个返回内部和外部卡路径的方法。如果你想要“文件选择器”,还有另一个选项@cricket_007:我指的是这个答案。实际上我没有文件
    数据/data/
    …该死,我应该更准确地澄清我的问题。请看更新的问题。我不明白这个答案。当我只想打开一个文件时,为什么要使用
    Intents
    RESULT\u OK
    项?python中的示例:
    open(“filename”)
    。我只想在android中做同样的事情。@Alex:“当我只想打开一个文件时,为什么我要使用意图和结果\确定项?”——你在问题中写道“我会使用一个简单的‘文件选择器’…”。这三个步骤就是如何实现一个简单的文件选择器。如果你不想实现一个简单的文件选择器,你不应该在你的问题中包含它。也许你是对的,因为你提供了使用文件选择器的模糊步骤。但是您没有提供示例代码;我也不同意这是“简单的”。简单是这样的:
    stringfilename=FileSelector(),或类似的内容。但你所描述的方式在我看来并不简单。但是太复杂了,太复杂了。也许android中没有简单的解决方案。