我正在使用此代码来读取文件:
try {
InputStreamReader inputStreamReader = new InputStreamReader(openFileInput(TEXTFILE));
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder stringbuilder = new StringBuilder();
String string=bufferedReader.readLine();
while (string!=null){
stringbuilder.append(string);
string=bufferedReader.readLine();
}
EditText.setText(stringbuilder.toString());
} catch (Exception e) {
e.printStackTrace();
}
为什么需要在stringbuilder中使用while?
答案 0 :(得分:0)
我明白了。
使用bufferedReader.readLine();
时,readLine()
读取bufferedReader对象中的第一个“可用”行,然后该行变为不可用。
因此,下次使用readLine()
时,它将读取下一行。
所以我们使用while
让它继续阅读,直到没有可用的行。
使用StringBuilder
,我们可以将这些行“追加”到一个字符串中。
答案 1 :(得分:0)
当你必须构建一个字符串时,你应该自动使用StringBuilder。这在资源节约方面更好。因为连接会创建一个新的String实例来存储结果。例如SResult = S1 + S2
。所以sResult
是一个新字符串。
当使用“字符串”构建器时,您将创建一个String结果的单个实例。因此,就创建的实例而言,您有s1+s2+s3+...+sN+sResult
个实例,而不是将新实例乘以您连接的次数。
使用BufferedReader,您将迭代文件的行。 readline();
调用只会返回下一行进行读取,直到BufferedReader
到达文件末尾。假设方法readLine();
将会读取,直到下一个换行符'\n'
更准确。
MSDN: 一行被定义为一个字符序列,后跟一个换行符(“\ n”),一个回车符(“\ r”),或一个回车符后面紧跟换行符号(“\ r \ nn “)。返回的字符串不包含终止回车符或换行符。如果到达输入流的末尾,则返回的值为null。
自Java 7起,您必须使用try-with-resource
来操作流。因为在您的情况下,您最后不会关闭它。这不是正确的方法。您的方式在您的操作系统导航器访问文件时提供了问题,例如,即使您关闭了Java应用程序。如果文件未关闭,您的文件仍可以打开,因此try-with-resource block
可以为您完成工作。
请参阅:try-with-resource