【问题标题】:FileWriter() corrupt file warningFileWriter() 损坏文件警告
【发布时间】:2012-06-05 09:48:31
【问题描述】:

我有一个将jTable 实例转换为excel 文件的应用程序。在我之前的问题中,我在使用FileOutputStream() 时遇到了问题,事实证明问题在于 AD 用户访问文件夹/文件的权限。由于我的上级不允许我更改权限,我改用FileWriter(),效果很好。唯一的问题是它不断警告用户他们正在打开的文件已损坏。这是警告:

您尝试打开的文件“filename.xls”与文件扩展名指定的格式不同。在打开文件之前,请确认文件没有损坏并且来自受信任的来源。您现在要打开文件吗?

我搜索了驻留在 Excel 2007 的文件扩展名安全性中的解决方案。信息可以找到here

我在应用程序覆盖的每个工作站的系统注册表中进行了一些配置。

我只是想问一下Office 14中是否有删除损坏文件警告的方法,因为我上级的工作站之一有Office 14。系统注册表中的更改并没有停止损坏文件警告在他的工作站中。

【问题讨论】:

  • 你写文件的格式是什么?如果它是一个没有格式的简单excel文件,你可以简单地使用一个逗号分隔的值文件,扩展名为“.csv”。

标签: java excel warnings filewriter corrupt


【解决方案1】:

我的印象是您沉迷于“巫毒编程”实践;即将你不理解的解决方案应用于你不理解的问题。

首先,这个:

我在使用 FileOutputStream() 时遇到了问题,事实证明问题在于 AD 用户访问文件夹/文件的权限。由于我的上级不允许我更改权限,所以我使用 FileWriter() 代替,效果很好。

坦率地说,这没有意义。如果您无法使用new FileOutputStream(File) 打开文件,那么您应该无法使用new FileWriter(File) 打开它。为什么?因为构造函数的源码是这样的:

    public FileWriter(File file) throws IOException {
        super(new FileOutputStream(file));
    }

也就是说,FileWriter构造函数做的第一件事就是调用你说不起作用的FileOutputStream构造函数!! (这同样适用于这些构造函数的其他重载。)

那么您当前的问题实际上是 Excel 不允许您打开 XLS 文件,因为它的文件类型与其后缀不匹配。您提出的解决方案是搞乱注册表。但可以肯定的是,正确的方法是找出为什么文件类型与后缀不匹配。

  • 您是否在文件格式上犯了错误(例如,“因为您使用 FileWriter 编写了它)?
  • 您是否为所使用的电子表格格式选择了错误的文件后缀?
  • 您是否使用错误的 MIMEtype 将其下载到用户的计算机上?

敲打所有客户端计算机上的注册表...仅仅因为您在某个网站上阅读过它...这就是 Voodooo!

你的老板禁止你乱用 AD 权限,我并不感到惊讶。在这一点上,他可能担心你会造成严重的伤害。


顺便说一句,您的注册表黑客行为使警告消失实际上是关闭了一项安全检查,该检查旨在帮助加强用户的 PC 免受攻击。我觉得这不是解决您问题的好方法。

【讨论】:

    猜你喜欢
    • 2014-09-29
    • 1970-01-01
    • 2010-10-30
    • 2017-03-07
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    相关资源
    最近更新 更多