Java:读取文件的问题

时间:2011-02-24 13:04:40

标签: java file

我正在使用此方法加载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)。那是为什么?

谢谢,

伊万

4 个答案:

答案 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();