站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题实例分析Java SE 6.0新增功能

实例分析Java SE 6.0新增功能

摘要: Java 6.0标准版(Mustang)包含了大量使Java开发更为容易的特性。
  下载本文源代码

  Java 6.0标准版(Mustang)包含了大量使Java开发更为容易的特性。在本文中,我们将讨论通过部分新特性来帮助你实现如下功能:

  · 设置文件和目录许可权

  · 获取分区上自由空间和可用空间数

  · 把Component对象添加到JTabbedPane的选项卡上

  · 在你的Java基础类/Swing(JFC/Swing)应用程序中使用流行的SwingWorker类

  因此,如果JSR 270专家组同意采纳这些特征,那么在Mustang的下一个发行版本中你就会看到这些特征。

  注意:为了运行本文中的源码,你必须下载并安装Mustang的最新版本。

  一、 设置文件和目录权限

  现在,从Mustang build 31开始,你可以在本地文件系统中设置一个文件的可读、可写和可执行标志。这项功能已经被添加到java.io.File类中,并通过使用下列方法来实现:

<table borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1> <tr> <td>public boolean setReadable(boolean readable, boolean ownerOnly)
public boolean setReadable(boolean readable)
public boolean setWritable(boolean writable, boolean ownerOnly)
public boolean setWritable(boolean writable)
public boolean setExecutable(boolean executable, boolean ownerOnly)
public boolean setExecutable(boolean executable) </td></tr></table>
  如果你曾某种UNIX系统上工作过,那么你应该对这些方法非常熟悉-其实它们实现了chmod命令的一些功能。这些方法试图设置由现在的File对象所描述的文件或目录的适当权限。如果把第二个可选参数设置为true,那么该权限将仅应用于当前所有者标志。否则,这些方法将应用到所有用户。注意,如果底层文件系统没法区分该所有者和其他所有者的权限(在一些版本的Windows中就是这样),那么这一权限将应用到每一个人,而不管传递的是什么值。

  如果你是一个使用NT文件系统的Windows用户,那么你应该读一下这个文档,它解释了如何使用各种不同的选项来控制不同用户的文件存取权限问题。

  如你所想,如果用户没有权限来改变这个抽象路径名的存取权限,那么第一个方法就会失败(也就是说,返回false);而且,这些方法也会抛出一个java.lang.SecurityException异常-如果存在一个Java安全管理器并且它的checkRead()/checkWrite()/checkExecute()方法不允许存取该文件的话。

  下表1显示了在多种文件系统上运行这些命令的典型结果,以及这些命令在不同目标操作系统上的可用性。

  表1.在常用OS文件系统上的java.io.File权限操作

<table cellSpacing=0 cellPadding=0 width="92%" align=center border=1> <tr> <td>命令</td> <td>在Windows XP系统上的返回值</td> <td>在Linux系统上的返回值</td> <td>在solaris系统上的返回值</td></tr> <tr> <td>setReadable(true)</td> <td>true </td> <td>True(等价于chmod+r)</td> <td>True(等价于chmod+r)</td></tr> <tr> <td>setReadable(false)</td> <td>False(在Windows中文件可读性不能被设置为False)</td> <td>True(等价于chmod-r)</td> <td>True(等价于chmod-r)</td></tr> <tr> <td>setWritable(true)</td> <td>True(切换Windows的只读文件属性)</td> <td>True(等价于chmod+w)</td> <td>True(等价于chmod+w)</td></tr> <tr> <td>setWritable(false) </td> <td>true(切换Windows的只读文件属性)</td> <td>True(等价于chmod-w)</td> <td>True(等价于chmod-w)</td></tr> <tr> <td>setExecutable(true)</td> <td>true</td> <td>True(等价于chmod+x)</td> <td>True(等价于chmod+x)</td></tr> <tr> <td>setExecutable(false)</td> <td>false(在Windows中文件可执行属性不能被设置为False)</td> <td>True(等价于chmod-x)</td> <td>True(等价于chmod-x)</td></tr></table>
  决定是否文件是可读,可写或可执行的方法与这个平台的前一个版本-Java 2平台,标准版(J2SE)5.0-保持一致。

<table borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1> <tr> <td>public boolean canRead();
public boolean canWrite();
public boolean canExecute();</td></tr></table>
  二、 取得硬盘分配空间

  除了允许你设置文件和目录权限外,Mustang还为你提供了三个新方法来决定当前磁盘分区中的可用空间数,这是由一个java.io.File对象来描述的:

<table borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1> <tr> <td>public long getTotalSpace();
public long getFreeSpace();
public long getUsableSpace();</td></tr></table>
  每一个这些方法返回要求的由java.io.File所描述的分区的字节大小,否则,如果从File对象中无法取得一个分区则返回值为0L。

  借助于getFreeSpace()和getUsableSpace()方法,未分配字节的返回数是(根据有关文档):"这仅是一种提示而不是保证-有可能使用大多数或所有这些字节;但紧跟这个调用之后的未分配的字节数很可能是准确的,当然也有可能因某些外部I/O操作(包括在该虚拟机外面所作的系统调用)而导致不准确。"

  那么,在这个两个方法之间有什么区别呢?getFreeSpace()方法返回分区的自由空间数量的一个即时数。而getUsableSpace()方法还包含了另外一些功能来检查写许可和其它操作系统限制,这将返回一个可用空间数的更好的估计值。如果你想决定在写向一个文件之前是否你有足够的磁盘空间,那么,典型情况下getUsableSpace()将给你一个更精确的估计值。注意,如果安装了一个安全管理器并且它不允许对于RuntimePermission("getFileSystemAttributes")进行调用,那么这两个方法都将抛出一个SecurityException异常。


↑返回目录
前一篇: 基于J2EE的电子商务网站实例解析
后一篇: Struts的巨大烦恼 真的不适合大系统?_软件_Struts