如何在java中的applet中写入文件?

由于Applet在浏览器中以沙盒模式运行,因此我使用AccessController.doPrivileged来写入文件。 它在Eclipse中运行时写入文件,但在浏览器中访问applet时不写入。 我错过了什么? 这是代码:

public class HelloWorld extends Applet { public void paint(Graphics g) { AccessController.doPrivileged(new PrivilegedAction() { public Boolean run() { try { System.out.println(System.getProperty("user.home")); String userHome = System.getProperty("user.home"); FileWriter fw = new FileWriter(userHome + File.separator + "test" + File.separator + "area.txt"); fw.write("The area is 20m"); fw.flush(); fw.close(); } catch (IOException ioe) { System.err.println(ioe); } return Boolean.TRUE; } }); } } 

AccessController.doPrivileged没有按照你的想法做到1

但首先是applet可以访问本地文件系统的两种(实用)方式。

  • 对applet进行数字签名,然后在提示时让用户确定该applet。
  • 在1.6.0_10 + JRE中运行的嵌入式applet还可以访问JNLP API的服务,其中包括JNLP API文件服务。 他们可以在沙盒应用程序中工作。 – 他们只是在小程序加载或保存文件时提示用户。 当然,使用JWS启动的自由浮动 applet可以在Java 1.2之后执行相同的操作,但是从1.6.0_10开始,这些相同的applet可以保持嵌入状态。 看演示。 一个小应用程序中的文件服务 。 它配有源代码,或者用于嵌入式applet的其他小型动画GIF制作器。

您可能会注意到我没有在实用方法列表中列出“调整策略文件/设置”。 那是因为它不太实际。 至少不是因为部署它们的人控制目标机器的封闭内部网之外的任何东西(并且因此可以安装策略文件以允许applet信任)。 但在那种情况下,小程序的好处在任何情况下都会受到严重侵蚀。

  1. 它的作用是允许使用不受信任的源(如JavaScript)调用已受信任的applet。 如果添加实际上确实改变了applet的安全环境而没有大量的铃声和口哨警告最终用户,那将是一个安全漏洞。