Java Android:将文本文件输入到字符串,包括新行

Java Android:将文本文件输入到字符串,包括新行,java,android,string,inputstream,Java,Android,String,Inputstream,我一直在开发一款个人应用程序,到目前为止,Stack Overflow帮了我一点忙,但现在我遇到了另一个问题。我试图读取存储在源代码中的基本文本文件,并将其输出到警报对话框。我的代码会这样做,但对话框不会显示我的任何新行 displayChangelogDialog方法 private void displayChangelogDialog() { Context context = this; AssetManager am = context.getAssets();

我一直在开发一款个人应用程序,到目前为止,Stack Overflow帮了我一点忙,但现在我遇到了另一个问题。我试图读取存储在源代码中的基本文本文件,并将其输出到警报对话框。我的代码会这样做,但对话框不会显示我的任何新行

displayChangelogDialog方法

private void displayChangelogDialog() {
    Context context = this;
    AssetManager am = context.getAssets();
    InputStream is;
    // ensure that changelog is available
    try {
        is = am.open("changelog");
        // changelog dialog
        new AlertDialog.Builder(this)
                .setTitle("Changelog")
                .setMessage(getStringFromInputStream(is)) // convert changelog to string
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // do nothing
                    }
                })
                .show();
    } catch (IOException e) {
        Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();
        e.printStackTrace();
    }
}
getStringFromInputStream方法

private static String getStringFromInputStream(InputStream is) {

    BufferedReader br = null;
    StringBuilder sb = new StringBuilder();

    String line;
    try {

        br = new BufferedReader(new InputStreamReader(is));
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    return sb.toString();

}
更改日志文本文件

v0.0.3
- Update PPS rate for recent difficulty increase

v0.0.2
- Calculate DGM based on PPS rate
我已尝试在每行末尾添加“\n”,但不起作用,仅显示字符“\n”。提前感谢大家。

readLine()
将读取一个换行符,但不包括换行符。此外,这里没有理由使用字符串生成器。更改为:

String result = "";

String line;
try {

    br = new BufferedReader(new InputStreamReader(is));
    while ((line = br.readLine()) != null) {
        result += line + "\n";
    }

} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (br != null) {
        try {
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

return result;
readLine()
将最多读取一个换行符,但不包括换行符。此外,这里没有理由使用字符串生成器。更改为:

String result = "";

String line;
try {

    br = new BufferedReader(new InputStreamReader(is));
    while ((line = br.readLine()) != null) {
        result += line + "\n";
    }

} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (br != null) {
        try {
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

return result;

有一种简单的方法可以将所有inputstream读取到一个string对象中,该对象包含您所需的所有内容,而无需逐行读取

Scanner scanner = new Scanner(inputStream).useDelimiter("\\A");
String string = scanner.hasNext() ? scanner.next() : null;
scanner.close();

有一种简单的方法可以将所有inputstream读取到一个string对象中,该对象包含您所需的所有内容,而无需逐行读取

Scanner scanner = new Scanner(inputStream).useDelimiter("\\A");
String string = scanner.hasNext() ? scanner.next() : null;
scanner.close();
你能试试sb.append(System.getProperty(“line.separator”)。您可以尝试
sb.append(System.getProperty(“line.separator”)