Android文本文件(在原始目录中)未正确读取

时间:2011-12-07 20:21:18

标签: android android-layout

我想从放在res / raw / text中的文本文件中读取 我成功阅读但在输出中的每一行之后都有一个像“[]”这样的奇怪字符。 这个字符位于输出中每一行的末尾,我的源文件(文本)中有新行。 不知道如何从每一行中删除这个角色..

  public class HelpActivity extends Activity{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.help);
    TextView textview = (TextView)findViewById(R.id.TextView_HelpText);
    textview.setText(readTxt());

}
private String readTxt() {
     InputStream is = getResources().openRawResource(R.raw.text);
        ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
         int i;

        try
        {

            i = is.read();
            while (i != -1)
            {
                byteArray.write(i);
                i = is.read();
            }
            is.close();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block

            e.printStackTrace();
        }
        return byteArray.toString();

}

}

2 个答案:

答案 0 :(得分:2)

您可能正在拾取不需要的或未格式化的CR / LF字符,这就是将文本拆分为新行的原因。如果你在Windows上,那么行尾会有CR和LF。在OS X和Linux上,只有一个LF。 (老麦克斯只有CR。)

因此,如果您将文本文件保存在Windows中并在Android(Linux)上显示,则未格式化的文本可能会显示额外的CR字符,每行的末尾都有一个。

要解决此问题,请尝试使用此类

private String readTxt() {
    InputStream is = getResources().openRawResource(R.raw.text);
    BufferedReader r = new BufferedReader(new InputStreamReader(is));
    StringBuilder total = new StringBuilder();
    String line;
    while ((line = r.readLine()) != null) {
        total.append(line);
    }
    return total.toString();
}

部分借鉴https://stackoverflow.com/a/2549222/324625

答案 1 :(得分:0)

您是如何创建文本文件的?操作系统如何处理行尾字符有所不同。 Unix / Linux EOL字符与Windows EOL字符不同,这可以解释其中的区别。