Java FileInputStream

use*_*598 3 java bytearray fileinputstream java-io

我试图使用FileInputStream基本上读取文本文件,然后将其输出到不同的文本文件中.但是,当我这样做时,我总是会得到非常奇怪的角色.我确信这是我犯的一个简单的错误,感谢任何帮助或指向我正确的方向.这是我到目前为止所得到的.

    File sendFile = new File(fileName);
    FileInputStream fileIn = new FileInputStream(sendFile);
    byte buf[] = new byte[1024];
    while(fileIn.read(buf) > 0) {
        System.out.println(buf);
    }
Run Code Online (Sandbox Code Playgroud)

它正在读取的文件只是一个普通ASCII字符的大文本文件.然而,每当我执行system.out.println时,我得到输出[B @ a422ede.关于如何使这项工作的任何想法?谢谢

das*_*ght 6

发生这种情况是因为您打印的是字节数组对象本身,而不是打印其内容.您应该从缓冲区和长度构造一个String,然后打印该String.用于此的构造函数是

String s = new String(buf, 0, len, charsetName);
Run Code Online (Sandbox Code Playgroud)

在上面,len应该是read()方法调用返回的值.charsetName应表示基础文件使用的编码.

  • 不,这绝对不是使用的构造函数!无论何时从字节转换为字符串或从字符串转换为字节,您都需要编码*!`new String(bytes,encoding)`.如果您未指定编码,则会获得平台默认值,该默认值适用于所有意图和目的.此外,您不能使用任何随机偏移和长度到缓冲区,您可能最终切断多字节字符. (4认同)