在安卓中逐行读取文本文件 [已关闭]

2022-09-04 06:07:13

嗨,我刚刚开始学习Android开发,我正在尝试构建一个从文件中读取文本的应用程序。我一直在互联网上搜索,但我似乎没有找到这样做的方法,所以我有几个问题。

1.如何做到这一点?在Android中逐行读取文件的首选方法是什么?

2.我应该在哪里存储文件?它应该在原始文件夹中还是在资产文件夹中?

所以这就是我已经尝试过的:“(我认为问题可能在于找到文件..)

@Override   
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.filereader);

    try {
        // open the file for reading
        InputStream fis = new FileInputStream("text.txt");

        // if file the available for reading
        if (fis != null) {

          // prepare the file for reading
          InputStreamReader chapterReader = new InputStreamReader(fis);
          BufferedReader buffreader = new BufferedReader(chapterReader);

          String line;

          // read every line of the file into the line-variable, on line at the time
          do {
             line = buffreader.readLine();
            // do something with the line 
             System.out.println(line);
          } while (line != null);

        }
        } catch (Exception e) {
            // print stack trace.
        } finally {
        // close the file.
        try {
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

答案 1

取决于您打算对该文件执行的操作。如果您的目标只是读取文件,那么资产文件夹就是您的最佳选择。如果要在完成处理该文件后将信息存储在该文件中,则应将其放在设备上。

如果选择选项 2,则需要确定是否希望其他应用程序读取该文件。更多信息可以在以下地址找到:

http://developer.android.com/training/basics/data-storage/files.html

否则,您可以使用标准Java过程直接读/写设备,就像您描述的那样。但是,文件路径可能是

“/SD卡/文本.txt”

编辑:

下面是一些入门代码

FileInputStream is;
BufferedReader reader;
final File file = new File("/sdcard/text.txt");

if (file.exists()) {
    is = new FileInputStream(file);
    reader = new BufferedReader(new InputStreamReader(is));
    String line = reader.readLine();
    while(line != null){
        Log.d("StackOverflow", line);
        line = reader.readLine();
    }
}

但它假设您知道您已经将sdcard放在了sdcard的根部。text.txt

如果文件位于 assets 文件夹中,则必须执行以下操作:

BufferedReader reader;

try{
    final InputStream file = getAssets().open("text.txt");
    reader = new BufferedReader(new InputStreamReader(file));
    String line = reader.readLine();
    while(line != null){
        Log.d("StackOverflow", line);
        line = reader.readLine();
    }
} catch(IOException ioe){
    ioe.printStackTrace();
}

答案 2

但是,您的代码看起来不错,您应该异步读取文件。对于文件路径,这取决于它是您捆绑在 APK 中的文件,还是您在应用数据文件夹中下载的文件。根据您针对的Android版本,我会使用资源尝试...

要从资源中读取,您可以在活动中执行此操作:

reader = new BufferedReader(
        new InputStreamReader(getAssets().open("filename.txt")));

推荐