【问题标题】:How to read a file in Android如何在 Android 中读取文件
【发布时间】:2014-03-20 15:27:30
【问题描述】:

我有一个名为“high.txt”的文本文件。我需要我的 Android 应用程序内部的数据。但我完全不知道如何将它读入字符串的 ArrayList。我尝试了在 Java 中执行此操作的正常方法,但显然这在 Android 中不起作用,因为它找不到文件。那么我该怎么做呢?我已经把它放在我的 res 文件夹中了。但是,您如何获取在 Android 中打开文件所获得的输入流并将其读入字符串的 ArrayList。我被困在那部分了。

基本上它看起来像这样:

3.  What do you do for an upcoming test?
L: make sure I know what I'm studying and really review and study for this thing. Its what Im good at. Understand the material really well.
CL: Time to study. I got this, but I really need to make sure I know it,
M: Tests can be tough, but there are tips and tricks. Focus on the important, interesting stuff. Cram in all the little details just to get past this test. 
CR: -sigh- I don't like these tests. Hope I've studied enough to pass or maybe do well.
R: Screw the test. I'll study later, day before should be good.

这是一个示例问题,所有行都将作为单独的字符串存储在数组列表中。

【问题讨论】:

标签: java android file android-file


【解决方案1】:
//find all files from folder /assets/txt/

String[] elements;

try {
    elements = getAssets().list("txt");
} catch (IOException e) {
    e.printStackTrace();
}

//for every files read text per line
for (String fileName : elements) {
    Log.d("xxx", "File: " + fileName);

    try {
        InputStream open = getAssets().open("txt/" + fileName);
        InputStreamReader inputStreamReader = new InputStreamReader(open);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String line = "";

        while ((line = bufferedReader.readLine()) != null) {
            Log.d("xxx", line);     
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}

【讨论】:

    【解决方案2】:

    如果你想从外部存储中读取文件而不是使用下面的方法。

    public void readFileFromExternal(){
        String path = Environment.getExternalStorageDirectory().getPath()
                   + "/AppTextFile.txt";
        try {
            BufferedReader reader = new BufferedReader(new FileReader(path));
            String line, results = "";
            while( ( line = reader.readLine() ) != null)
            {
                results += line;
            }
            reader.close();
                    Log.d("FILE","Data in your file : " + results);
          } catch (Exception e) {
        }
    }
    

    【讨论】:

      【解决方案3】:

      如果您将文本文件放在资产文件夹中,您可以使用我从我的一个项目中获取和修改的类似代码:

      public static void importData(Context context) {
          try {
              BufferedReader br = new BufferedReader(new InputStreamReader(context.getAssets().open("high.txt")));
      
              String line;
      
              while ((line = br.readLine()) != null) {
                  String[] columns = line.split(",");
      
                  Model model = new Model();
      
                  model.date = DateUtil.getCalendar(columns[0], "MM/dd/yyyy");
                  model.name = columns[1];
      
                  dbHelper.insertModel(model);
              }
      
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
      

      在循环中,您可以对列执行任何您需要的操作,此示例所做的是从每一行创建一个对象并将其保存在数据库中。

      对于这个例子,文本文件看起来像这样:

      15/04/2013,Bob
      03/03/2013,John
      21/04/2013,Steve
      

      【讨论】:

      • 另外我建议您是否想要更准确的答案来包含一些示例数据。
      • 我不断收到 OutOfMemory 错误。除了读取 100 行文件之外,还有更好的方法吗?谢谢
      • 你确定错误发生在这个函数中吗?这应该只从文件中一次读取一行,除非文件有问题,否则不应该出错。我一直使用它来读取相当大的文件而没有问题。也许如果您发布您的代码和 logcat,我可以进一步帮助您。谢谢。
      • 我正在尝试将它们全部添加到字符串的 ArrayList 中
      猜你喜欢
      • 2012-09-07
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 2014-12-16
      • 2013-06-19
      • 2012-01-19
      • 2020-03-09
      相关资源
      最近更新 更多