FileOutputstream.close()并不总是将字节写入文件系统?

时间:2014-09-18 10:27:27

标签: java android filesystems java-io

在阅读@Peter Lawrey的this answer之后,尤其是这句话:

  

close()可以确保文件实际写入磁盘(或不依赖于操作系统

(重点是我的。)

我有3个问题:

  • 是否确保在调用close()后磁盘上的所有字节都不可用? (我想这是真的,因为它来自@Peter Lawrey)

  • 一般情况下(即在所有操作系统上都有效),确保所有字节都有效写入磁盘的最佳方法是什么? (我可以想象计算写入流的字节数,等到 file.length() == byteCount ......但是有更好的方法吗?)

  • 特别是在 Android 上,是否足以调用fileOutputStream.close()以确保所有字节都有效地写入文件系统?

这是一些代码(忽略异常,......以保持简单)来说明我的帖子

    final InputStream instream = getInputStreamFromSomewhere();
    final FileOutputStream outputstream = new FileOutputStream(someExistingFile);
    int l;
    final byte[] tmp = new byte[1024];
    while ((l = instream.read(tmp)) != -1) {
            outstream.write(tmp, 0, l);
    }
    instream.close();
    //outputStream.flush(); //useless call since outputStream.flush() do nothing on FileOutputStream
    outputStream.close();
    //at this point : are all bytes written to disk ?

1 个答案:

答案 0 :(得分:5)

fileOutputstream.getFD().sync()

应该做你想做的事。见http://docs.oracle.com/javase/7/docs/api/java/io/FileDescriptor.html#sync()