代码之家  ›  专栏  ›  技术社区  ›  user2184598

Java文件输入流

  •  3
  • user2184598  · 技术社区  · 11 年前

    我正试图使用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);
        }
    

    它正在读取的文件只是一个由常规ASCII字符组成的大文本文件。然而,每当我执行system.out.println时,我都会得到输出[B@a422ede.有什么想法可以让它发挥作用吗?谢谢

    5 回复  |  直到 11 年前
        1
  •  6
  •   Sergey Kalinichenko    11 年前

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

    String s = new String(buf, 0, len, charsetName);
    

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

        2
  •  1
  •   Christoffer Hammarström    11 年前

    如果您正在从一个文件读取到另一个文件,则根本不应该将字节转换为字符串,只需将读取的字节写入到另一文件中即可。

    如果您打算将文本文件从一种编码转换为另一种编码,请从 new InputStreamReader(in, sourceEncoding) ,并写信给 new OutputStreamWriter(out, targetEncoding) .

        3
  •  0
  •   gerrytan    11 年前

    那是因为印刷 buf 将打印对字节数组的引用,而不是像您期望的那样将字节本身打印为String。你需要做 new String(buf) 将字节数组构造为字符串

    还可以考虑使用BufferedReader,而不是创建自己的缓冲区。有了它,你就可以做到

    String line = new BufferedReader(new FileReader("filename.txt")).readLine();
    
        4
  •  0
  •   user207421    11 年前

    您的循环应该如下所示:

    int len;
    while((len = fileIn.read(buf)) > 0) {
            System.out.write(buf, 0, len);
        }
    

    您(a)使用了错误的方法,(b)忽略了 read() ,而不是检查 < 0. 因此,您正在每个缓冲区的末尾打印垃圾邮件。

        5
  •  -1
  •   ouotuo    11 年前

    对象的defualt-toString方法是在内存中返回对象的id。 byte buf[]是一个对象。

    你可以用这个打印。

    File sendFile = new File(fileName);
    FileInputStream fileIn = new FileInputStream(sendFile);
    byte buf[] = new byte[1024];
    
    while(fileIn.read(buf) > 0) {
        System.out.println(Arrays.toString(buf));
    }
    

     File sendFile = new File(fileName);
    FileInputStream fileIn = new FileInputStream(sendFile);
    byte buf[] = new byte[1024];
    int len=0;
    while((len=fileIn.read(buf)) > 0) {
        for(int i=0;i<len;i++){
            System.out.print(buf[i]);
        }
        System.out.println();
    }