【问题标题】:How can I read a text file in Android?如何在 Android 中读取文本文件?
【发布时间】:2012-09-07 11:00:59
【问题描述】:

我想从文本文件中读取文本。在下面的代码中,发生了一个异常(这意味着它转到了catch 块)。我将文本文件放在应用程序文件夹中。我应该把这个文本文件(mani.txt)放在哪里才能正确阅读?

    try
    {
        InputStream instream = openFileInput("E:\\test\\src\\com\\test\\mani.txt"); 
        if (instream != null)
        {
            InputStreamReader inputreader = new InputStreamReader(instream); 
            BufferedReader buffreader = new BufferedReader(inputreader); 
            String line,line1 = "";
            try
            {
                while ((line = buffreader.readLine()) != null)
                    line1+=line;
            }catch (Exception e) 
            {
                e.printStackTrace();
            }
         }
    }
    catch (Exception e) 
    {
        String error="";
        error=e.getMessage();
    }

【问题讨论】:

  • 你希望你的模拟器成为你的 s/m 的一部分吗? "E:\\test\\src\\com\\test\\mani.txt"
  • 你想从哪个位置读取文本文件...?
  • InputStream iS = resources.getAssets().open(fileName); (如果你把文件放在资产中)
  • @Sandip 实际上我复制了文本文件 (mani.txt) 并将其放入 android 应用程序的文件夹中(文件夹有 .settings , bin,libs,src,assets,gen,res,androidmanifeast.xml )
  • 或简单地放入 res/raw 文件夹并检查我更新的答案。

标签: java android exception inputstream


【解决方案1】:

小文本文件的最短格式(在 Kotlin 中):

val reader = FileReader(path)
val txt = reader.readText()
reader.close()

【讨论】:

    【解决方案2】:

    试试这个:

    我假设你的文本文件在 sd 卡上

        //Find the directory for the SD Card using the API
    //*Don't* hardcode "/sdcard"
    File sdcard = Environment.getExternalStorageDirectory();
    
    //Get the text file
    File file = new File(sdcard,"file.txt");
    
    //Read text from file
    StringBuilder text = new StringBuilder();
    
    try {
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
    
        while ((line = br.readLine()) != null) {
            text.append(line);
            text.append('\n');
        }
        br.close();
    }
    catch (IOException e) {
        //You'll need to add proper error handling here
    }
    
    //Find the view by its id
    TextView tv = (TextView)findViewById(R.id.text_view);
    
    //Set the text
    tv.setText(text.toString());
    

    以下链接也可以帮助您:

    How can I read a text file from the SD card in Android?

    How to read text file in Android?

    Android read text raw resource file

    【讨论】:

    • 你的链接会帮助我实现
    • BufferedReader 最后需要关闭!
    • 如果您的 txt 文档中有一个空行,此解析器将停止工作!解决方案是承认有这个空行:while ((line = br.readLine()) != null) { if(line.length() > 0) { //do your stuff } }
    • @Shruti 如何将文件添加到 SD 卡中
    • @Choletski,你为什么说它会停止工作?如果有空行,则该空行将附加到文本 StringBuilder。有什么问题?
    【解决方案3】:

    试试这个代码

    public static String pathRoot = "/sdcard/system/temp/";
    public static String readFromFile(Context contect, String nameFile) {
        String aBuffer = "";
        try {
            File myFile = new File(pathRoot + nameFile);
            FileInputStream fIn = new FileInputStream(myFile);
            BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn));
            String aDataRow = "";
            while ((aDataRow = myReader.readLine()) != null) {
                aBuffer += aDataRow;
            }
            myReader.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return aBuffer;
    }
    

    【讨论】:

      【解决方案4】:

      首先将文本文件存储到原始文件夹中。

      private void loadWords() throws IOException {
          Log.d(TAG, "Loading words...");
          final Resources resources = mHelperContext.getResources();
          InputStream inputStream = resources.openRawResource(R.raw.definitions);
          BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
      
          try {
              String line;
              while ((line = reader.readLine()) != null) {
                  String[] strings = TextUtils.split(line, "-");
                  if (strings.length < 2)
                      continue;
                  long id = addWord(strings[0].trim(), strings[1].trim());
                  if (id < 0) {
                      Log.e(TAG, "unable to add word: " + strings[0].trim());
                  }
              }
          } finally {
              reader.close();
          }
          Log.d(TAG, "DONE loading words.");
      }
      

      【讨论】:

        【解决方案5】:

        如果你想从 sd 卡读取文件。那么下面的代码可能对你有帮助。

         StringBuilder text = new StringBuilder();
            try {
            File sdcard = Environment.getExternalStorageDirectory();
            File file = new File(sdcard,"testFile.txt");
        
                BufferedReader br = new BufferedReader(new FileReader(file));  
                String line;   
                while ((line = br.readLine()) != null) {
                            text.append(line);
                            Log.i("Test", "text : "+text+" : end");
                            text.append('\n');
                            } }
            catch (IOException e) {
                e.printStackTrace();                    
        
            }
            finally{
                    br.close();
            }       
            TextView tv = (TextView)findViewById(R.id.amount);  
        
            tv.setText(text.toString()); ////Set the text to text view.
          }
        
            }
        

        如果你想从资产文件夹中读取文件,那么

        AssetManager am = context.getAssets();
        InputStream is = am.open("test.txt");
        

        或者,如果您想从res/raw 文件夹中读取此文件,该文件将被索引并可以通过 R 文件中的 id 访问:

        InputStream is = getResources().openRawResource(R.raw.test);     
        

        Good example of reading text file from res/raw folder

        【讨论】:

        • br 在 finally 块中超出范围。
        【解决方案6】:

        试试这个

        try {
                reader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
            } catch (UnsupportedEncodingException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
              String line="";
              String s ="";
           try 
           {
               line = reader.readLine();
           } 
           catch (IOException e) 
           {
               e.printStackTrace();
           }
              while (line != null) 
              {
               s = s + line;
               s =s+"\n";
               try 
               {
                   line = reader.readLine();
               } 
               catch (IOException e) 
               {
                   e.printStackTrace();
               }
            }
            tv.setText(""+s);
          }
        

        【讨论】:

          【解决方案7】:

          将您的文本文件放入 Asset 文件夹...并从该文件夹中读取文件...

          请参阅下面的参考链接...

          http://www.technotalkative.com/android-read-file-from-assets/

          http://sree.cc/google/reading-text-file-from-assets-folder-in-android

          Reading a simple text file

          希望对您有所帮助...

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-03-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多