扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
因此,如果JSR 270专家组同意采纳这些特征,那么在Mustang的下一个发行版本中你就会看到这些特征。
注意:为了运行本文中的源码,你必须下载并安装Mustang的最新版本。下载本文示例源码
一、 设置文件和目录权限
现在,从Mustang build 31开始,你可以在本地文件系统中设置一个文件的可读、可写和可执行标志。这项功能已经被添加到java.io.File类中,并通过使用下列方法来实现:
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) |
如果你曾某种UNIX系统上工作过,那么你应该对这些方法非常熟悉-其实它们实现了chmod命令的一些功能。这些方法试图设置由现在的File对象所描述的文件或目录的适当权限。如果把第二个可选参数设置为true,那么该权限将仅应用于当前所有者标志。否则,这些方法将应用到所有用户。注意,如果底层文件系统没法区分该所有者和其他所有者的权限(在一些版本的Windows中就是这样),那么这一权限将应用到每一个人,而不管传递的是什么值。
如果你是一个使用NT文件系统的Windows用户,那么你应该读一下这个文档,它解释了如何使用各种不同的选项来控制不同用户的文件存取权限问题。
如你所想,如果用户没有权限来改变这个抽象路径名的存取权限,那么第一个方法就会失败(也就是说,返回false);而且,这些方法也会抛出一个java.lang.SecurityException异常-如果存在一个Java安全管理器并且它的checkRead()/checkWrite()/checkExecute()方法不允许存取该文件的话。
下表1显示了在多种文件系统上运行这些命令的典型结果,以及这些命令在不同目标操作系统上的可用性。
表1.在常用OS文件系统上的java.io.File权限操作
命令 | 在Windows XP系统上的返回值 | 在Linux系统上的返回值 | 在solaris系统上的返回值 |
setReadable(true) | true | True(等价于chmod+r) | True(等价于chmod+r) |
setReadable(false) | False(在Windows中文件可读性不能被设置为False) | True(等价于chmod-r) | True(等价于chmod-r) |
setWritable(true) | True(切换Windows的只读文件属性) | True(等价于chmod+w) | True(等价于chmod+w) |
setWritable(false) | true(切换Windows的只读文件属性) | True(等价于chmod-w) | True(等价于chmod-w) |
setExecutable(true) | true | True(等价于chmod+x) | True(等价于chmod+x) |
setExecutable(false) | false(在Windows中文件可执行属性不能被设置为False) | True(等价于chmod-x) | True(等价于chmod-x) |
决定是否文件是可读,可写或可执行的方法与这个平台的前一个版本-Java 2平台,标准版(J2SE)5.0-保持一致。
public boolean canRead(); public boolean canWrite(); public boolean canExecute(); |
除了允许你设置文件和目录权限外,Mustang还为你提供了三个新方法来决定当前磁盘分区中的可用空间数,这是由一个java.io.File对象来描述的:
public long getTotalSpace(); public long getFreeSpace(); public long getUsableSpace(); |
每一个这些方法返回要求的由java.io.File所描述的分区的字节大小,否则,如果从File对象中无法取得一个分区则返回值为0L。
借助于getFreeSpace()和getUsableSpace()方法,未分配字节的返回数是(根据有关文档):"这仅是一种提示而不是保证-有可能使用大多数或所有这些字节;但紧跟这个调用之后的未分配的字节数很可能是准确的,当然也有可能因某些外部I/O操作(包括在该虚拟机外面所作的系统调用)而导致不准确。"
那么,在这个两个方法之间有什么区别呢?getFreeSpace()方法返回分区的自由空间数量的一个即时数。而getUsableSpace()方法还包含了另外一些功能来检查写许可和其它操作系统限制,这将返回一个可用空间数的更好的估计值。如果你想决定在写向一个文件之前是否你有足够的磁盘空间,那么,典型情况下getUsableSpace()将给你一个更精确的估计值。注意,如果安装了一个安全管理器并且它不允许对于RuntimePermission("getFileSystemAttributes")进行调用,那么这两个方法都将抛出一个SecurityException异常。
三、 使用Component描述JTabbedPane中的选项卡
这是Swing的JtabbedPane中的一处微妙但是很有价值的改进。在以前的JtabbedPane中,你被限制仅用一个字符串,一个图标(或二者的结合)来描述一个选项卡。另外,如果你想的话,你还可以把一个提示小窗加到该选项卡上去。从Mustang的build 39开始,现在有可能使用一个Component来描述JtabbedPane中的一个选项卡。尽管这可能带来一系列的问题,但是,这种特性的最常用的方式是:添加一个Close按钮-它将从JTabbedPane中删除该选项卡。
Sun程序员和Swing工程师Alexander Potochkin在他的最近的一个有关这个主题的博客日志中指出,这三个新方法已经被添加到JTabbedPane。
你可以使用下列方法把Component设置为一个选项卡:
public void setTabComponentAt(int index, Component component) |
你可以使用下列方法得到这个组件:
public Component getTabComponentAt(int index) |
你可以使用下列这个方法来测试是否有组件被应用于这个JtabbedPane中:
public int indexOfTabComponent(Component tabComponent) |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者