
我们的项目产生各种报表, 其中一个功能是能将报表生成各种文件格式, 如Excel, Word, PDF, Html 和TXT文件。 我们弹出一个Dialog来让客户选择直接打开, 还是通过一个File Chooser来选择保存的文件名和路径, 保存在客户的机子上。客户抱怨说如果硬盘已经存在同名的文件。 没有任何提示就覆盖掉源文件。今天做的一个改进是检查是否已经存在同名文件, 如果有的话就弹出一个“Confirm File Ovewrite”的Dialog, 让客户选择是否覆盖。Looks like this one.
首先根据文件名来生成 File 对象。然后根据file.Exists() 来判断是否已经存在该文件。
File file = new File(filePath);
if( file.exists())
{
// 显示Dialog, 并根据客户的选择做相应的处理, 代码省略。
}
参照微软的样板, 显示文件名, 文件大小, 和文件最后修改时间等等。 其中重点是根据文件的类型显示出一个Icon(32x32)。 当然我们可以根据文件的后缀来加载相应的Icon, 但是一来拓展性差, 二来象Html文件, 在IE是省缺浏览器时显示IE的图标, FireFox是省缺浏览器时显示FireFox图标就做不到了。
最简单的方法是从系统取相应的图标。 代码如下:
import sun.awt.shell;
Public Icon getIconByFileType( File file )
{
try
{
ShellFolder shellFolder = ShellFolder.getShellFolder(file);
return shellFolder.getIcon(true);
}
catch (Exception e)
{
// do something
return null;
}
}
此方法仅适用于运行Sun JVM 的平台。在WinXP下java 1.6 下测试通过。
那么还有另外一种方法适合各种平台,但是只能取小图标(16x16)。
Public Icon getIconByFileType( File file )
{
try
{
FileSystemView view = FileSystemView.getFileSystemView();
return view.getSystemIcon(file);
}
catch (Exception e)
{
// do something
return null;
}
}
一旦取得图标, 就可以通过JLabel的setIcon 方法来把图标显示出来。
没有评论:
发表评论