为什么将FileOutputStream打开到二进制文件会破坏它?

时间:2012-10-26 10:46:56

标签: java io file-permissions binaryfiles corruption

我需要检查给定的二进制文件是否具有写访问权限。文件类API有一个错误,它在JDK7中修复,但我不能只升级到它。

以下是错误的链接:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6203387

当我打开FileOutputStream时,它会破坏二进制文件,资源管理器会将其大小显示为零并且无法启动它。这是代码段。

操作系统:Win7

请帮助我理解为什么只打开输出流(不写任何东西)会破坏二进制文件。有没有解决这个问题的工作?

以下是代码段:

private boolean hasWriteAccess(File file) {
    FileOutputStream fos = null; 
    try {
        fos = new FileOutputStream(file);
    } catch (Exception e) {
        e.printStackTrace();
        if(fos != null) {
            try {
                fos.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
        return false;
    }
    return true;
}

2 个答案:

答案 0 :(得分:6)

  

当我打开FileOutputStream时,它会破坏二进制文件,资源管理器会将其大小显示为零

它不会损坏文件 - 它会截断它。

如果要在“追加”模式下打开它,请使用构造函数重载,该重载允许:

fos = new FileOutputStream(file, true);

看看你的代码,这几乎可以肯定你想做什么。

正如安德鲁所说,你应该总是关闭流。

答案 1 :(得分:1)

使用时

new FileOutputStream(file);

它将始终截断文件。

如果要在不截断文件的情况下打开文件,可以使用append代替。

new FileOutputStream(file, true).close();