我正在使用此方法加载XML文件:
public static String readTextFile(String fullPathFilename) throws IOException {
StringBuffer sb = new StringBuffer(1024);
BufferedReader reader = new BufferedReader(new FileReader(fullPathFilename));
char[] chars = new char[1024];
while(reader.read(chars) > -1){
sb.append(String.valueOf(chars));
}
reader.close();
return sb.toString();
}
但它不会加载整个数据。它不是25634个字符,而是加载10个(25624)。那是为什么?
谢谢,
伊万
答案 0 :(得分:1)
我认为你的代码中有一个错误,最后一次读取可能不一定填充char [],但你仍然加载了所有的字符串。为此,您需要执行以下操作:
StringBuilder res = new StringBuilder();
InputStreamReader r = new InputStreamReader(new BufferedInputStream(is));
char[] c = new char[1024];
while(true) {
int charCount = r.read(c);
if (charCount == -1) {
break;
}
res.append(c, 0, charCount);
}
r.close();
另外,你怎么知道你期待25634个字符?
(并使用StringBuilder而不是StringBuffer,前者不是线程安全,因此速度更快)
答案 1 :(得分:1)
使用BufferedReader
,您可以获得readLine() - Method,这对我来说很有效。
StringBuffer sb = new StringBuffer( 1024 );
BufferedReader reader = new BufferedReader( new FileReader( fullPathFilename ) );
while( true ) {
String line = reader.readLine();
if(line == null) {
break;
}
sb.append( line );
}
reader.close();
答案 2 :(得分:0)
也许您的文件中有25634 字节,仅代表25624个字符?这可能发生在UTF-8等多字节字符集中。所有InputStreamReader
(包括FileReader
)都会使用Charset
(显式指定的,或依赖于平台的默认编码)自动执行此转换。
答案 3 :(得分:0)
使用FileInputStream避免某些字符被识别为utf-8:
StringBuffer sb = new StringBuffer(1024);
FileInputStream fis = new FileInputStream(filename);
char[] chars = new char[1024];
while(reader.read(chars) > -1){
sb.append(String.valueOf(chars));
}
fis.close();
return sb.toString();