这是上学时JAVA课程的课程实践,因为学习好,老师让写一个比较有难度的程序出来,不要随便写个简单的来应付。
当时也不知道什么类型的程序在JAVA里比较有难度,正好在JAVA中文论坛里看到有人问用JAVA怎么写一个WINDOWS资源管理器,跟帖的人很多,但是都不知道怎么实现,然后我就想自己写一个出来,证明一下学习JAVA的成绩。
后来查了很多资料,写了两个周写出来的,后来觉得资源管理器本身没什么意义,就加了个批量更名的功能。
这个程序可以实现像WINDOWS下的资源管理器一样的功能,左右分栏,左边是目录树,右边是文件列表,下面有更名的选项,更名之后还可以撤消。
下面把源码放出来。/******************************/
/* */
/* 批量更名程序 */
/* */
/******************************/
import javax.swing.border.*;
import javax.swing.ListModel;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.tree.*;
import javax.swing.filechooser.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import java.lang.Exception;
public class PLGM extends JFrame
{
private JTabbedPane jTabbedPane1;
private JPanel contentPane;
private JLabel jLabel1;
private JCheckBox jcballsel,jcbresel;
private JTextField jtpath;
private JTree tree;
private JPanel jPanel1;
private JPanel jpanellist;
private JLabel jlname;
private JTextField jtname;
private JButton jbchose;
private JPanel jPanel5;
private JCheckBox jcbrename;
private JCheckBox jcbreext;
private JCheckBox jcbid;
private JTextField jtrename;
private JTextField jtreext;
private JTextField jtnumber;
private JButton jbchange;
private JButton jbback;
private JPanel jPanel6;
private JDialog dialog;
private JTextField statusbar;
private JButton jbdel;
FileSystemView fileSystemView=FileSystemView.getFileSystemView();
JMenuBar menuBar = new JMenuBar();
JMenu menuFile1 = new JMenu("文件");
JMenu menuFile2 = new JMenu("帮助");
JMenuItem menuItemExit = new JMenuItem("退出");
JMenuItem menuHowUse = new JMenuItem("帮助");
JMenuItem menuaboutus = new JMenuItem("关于");
private ActionListener aListener;
public PLGM()
{
super();
initializeComponent();
jcbid.setEnabled(false);
jtnumber.setEnabled(false);
this.setVisible(true);
}
private void initializeComponent()
{
FileNode root=new FileNode(fileSystemView.getRoots()[0]);//调用FileNode类得到系统桌面文件夹getRoots()[0]。数组getRoots()[0]可改变。
DefaultTreeModel treeModel=new DefaultTreeModel(root);//定义JTree 模型
tree = new JTree(treeModel);
tree.setEditable(true);//设置编辑状态
tree.setCellRenderer(new MyTreeCellRenderer());//调用setCellRenderer内部类
tree.setSelectionRow(0);//初始时不要展开JTree
tree.setComponentOrientation(ComponentOrientation.UNKNOWN);
// 设置JTree的监听事件
tree.addTreeExpansionListener(new TreeExpansionListener()
{
public void treeCollapsed(TreeExpansionEvent e)
{
}//必须写
public void treeExpanded(TreeExpansionEvent e)
{
TreePath path = e.getPath();
FileNode node = (FileNode) path.getLastPathComponent();
jtpath.setText(node.getFile().toString());
File tardir=new File(node.getFile().toString());
// SelectFiles(tardir);//调用SelectFiles
jpanellist.removeAll();//清除jpanellist的所有内容
addcheckbox addcb =new addcheckbox();
addcb.addcheckbox(tardir);
//如果节点没有展开
if( ! node.isExplored())
{
DefaultTreeModel model=(DefaultTreeModel)tree.getModel();
node.explore();
model.nodeStructureChanged(node);
}
}
});
setJMenuBar(menuBar);
menuFile1.add(menuItemExit);// 加入子菜单
menuFile2.add(menuHowUse);
menuFile2.add(menuaboutus);
menuBar.add(menuFile1);
menuBar.add(menuFile2);
// JDialog
dialog=new JDialog();
dialog.getContentPane().setLayout(new FlowLayout());
dialog.setSize(300,300);
dialog.setModal(true);
dialog.setTitle("关于");
// dialog.getContentPane().add();
// dialog.setBackground();
// dialog.update("1.jpg");
//增加菜单的单击事件
menuItemExit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {System.exit(0);}
});
menuaboutus.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// dialog.show(true);
JOptionPane.showMessageDialog(null,
"**********************************************"+"\n"+
"* 批量更名程序 Ver 1.0 (测试版)*"+"\n"+
"* *"+"\n"+
"* 作 者: 邵 丹,严力津 *"+"\n"+
"* 联系方式:adan_926@163.com*"+"\n"+
"*yljboy@eyou.com*"+"\n"+
"**********************************************");
}
});
menuHowUse.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(null,
"**********************************************"+"\n"+
"* 批量更名程序 Ver 1.0 (测试版) *"+"\n"+
"* *"+"\n"+
"* 本程序实现了文件的批量更名,并带 *"+"\n"+
"*有预览和还原的功能。*"+"\n"+
"* 欢迎使用并指正其缺点和不足,如有 *"+"\n"+
"*任何意见或建议,请与我们联系。 *"+"\n"+
"**********************************************");
}
});
jTabbedPane1 = new JTabbedPane();
contentPane = (JPanel)this.getContentPane();
jLabel1 = new JLabel();
jcballsel = new JCheckBox();
jcbresel=new JCheckBox();
jtpath = new JTextField();
jPanel1 = new JPanel();
jpanellist = new JPanel();
jlname=new JLabel();
//jcbisdirectory = new JCheckBox();
jtname = new JTextField();
jbchose = new JButton();
jbdel=new JButton();
jPanel5 = new JPanel();
jcbrename = new JCheckBox();
jcbreext = new JCheckBox();
jcbid = new JCheckBox();
jtrename = new JTextField();
jtreext = new JTextField();
jtnumber = new JTextField();
jbchange = new JButton();
jbback = new JButton();
jPanel6 = new JPanel();
JCheckBox cb =new JCheckBox();
statusbar=new JTextField();
statusbar.setText("");
statusbar.setEditable(false);
//add(statusbar,BorderLayout.SOUTH);
aListener = new AListener();
// jTabbedPane1
jTabbedPane1.addTab("批量更名", jPanel1);
// contentPane
contentPane.setLayout(null);
addComponent(contentPane, jTabbedPane1, 0,0,720,450);
// jLabel1
jLabel1.setText("直达路径");
// jcballsel
jcballsel.setText("全选");
jcballsel.addActionListener(aListener);
addComponent(contentPane, statusbar, 0,450,720,20);
jcbresel.setText("反选");
jcbresel.addActionListener(aListener);
addComponent(contentPane, statusbar, 0,450,720,20);
jbdel.setText("删除");
jbdel.addActionListener(aListener);
jtpath.setText("");
jtpath.addActionListener(aListener);
jtpath.addKeyListener(new myKeyAdapter());
jPanel1.setLayout(null);
addComponent(jPanel1, jLabel1, 224,9,60,18);
addComponent(jPanel1, jcballsel, 224,36,49,24);
addComponent(jPanel1, jcbresel, 280,36,49,24);
addComponent(jPanel1,jbdel,350,36,59,20);
addComponent(jPanel1, jtpath, 300,8,400,22);
addComponent(jPanel1, new JScrollPane(tree), 3,3,212,413);
addComponent(jPanel1, new JScrollPane(jpanellist), 224,67,277,350);//加入滚动条
addComponent(jPanel1, jPanel5, 507,59,200,130);
addComponent(jPanel1, jPanel6, 509,200,200,220);
jpanellist.setBorder(BorderFactory.createLineBorder(Color.black));
jpanellist.setLayout(new BoxLayout(jpanellist, BoxLayout.Y_AXIS));
jlname.setText("要搜索的文件");
//jcbext.setText("扩展名");
//jcbisdirectory
//jcbisdirectory.setText("是否需要子文件夹");
//jtname
jtname.setText("");
jtname.addActionListener(aListener);
// jbchose
jbchose.setText("搜索");
jbchose.addActionListener(aListener);
// jPanel5
jPanel5.setBorder(new TitledBorder("搜索"));
jPanel5.setLayout(null);
addComponent(jPanel5, jlname, 8,16,100,25);
//addComponent(jPanel5, jcbisdirectory, 5,70,133,25);
addComponent(jPanel5, jtname, 90,18,100,22);
addComponent(jPanel5, jbchose, 80,100,59,20);
// jcbrename
jcbrename.setText("文件名");
jcbrename.addActionListener(aListener);
// jcbreext
jcbreext.setText("扩展名");
// jcbid
jcbid.setText("编 号");
// jtrename
jtrename.setText("");
jtrename.addActionListener(aListener);
// jtreext
jtreext.setText("");
jtreext.addActionListener(aListener);
// jtnumber
jtnumber.setText("");
jtnumber.addActionListener(aListener);
// jbchange
jbchange.setText("改名");
jbchange.addActionListener(aListener);
// jbback
jbback.setText("还原");
jbback.addActionListener(aListener);
// jPanel6
jPanel6.setBorder(new TitledBorder("改名"));
jPanel6.setLayout(null);
addComponent(jPanel6, jcbrename, 5,30,83,25);
addComponent(jPanel6, jcbreext, 5,60,83,25);
addComponent(jPanel6, jcbid, 5,95,83,25);
addComponent(jPanel6, jtrename, 90,30,100,22);
addComponent(jPanel6, jtreext, 90,60,100,22);
addComponent(jPanel6, jtnumber, 90,95,100,21);
addComponent(jPanel6, jbchange, 20,165,59,20);
addComponent(jPanel6, jbback, 120,165,59,20);
// plgm
WListener wListener = new WListener();
this.addWindowListener(wListener);
this.setTitle("批量更名程序 作者:邵丹,严力津");
this.setSize(720,520);
this.setLocation(0,20);
this.setResizable(false);
}
/** Add Component Without a Layout Manager (Absolute Positioning) */
private void addComponent(Container container,Component c,int x,int y,int width,int height)
{
c.setBounds(x,y,width,height);
container.add(c);
}
// TODO: Add any appropriate code in the following Event Methods
private void jbchose_actionPerformed(ActionEvent e)
{
//FileNode node = (FileNode)tree.getLastSelectedPathComponent();
// File tardir=new File(node.getFile().toString());
File tardir=new File(jtpath.getText().toString());
if(!tardir.exists())
{
JOptionPane.showMessageDialog(null,"指定的目录不存在!");
return;
}
jpanellist.removeAll();
jpanellist.repaint();
chosefile(tardir);
statusbar.setText("");
}
//给文件改名
private String renamefile(File tardir,int id)
{
String rename;
String reext;
String temp="...";
File ftemp;
String str1;
String str2;
temp=tardir.getName();
str1=temp.substring(0,temp.indexOf("."));//得到"."前的文件名
str2=temp.substring(temp.indexOf("."));//得到扩展名
rename=jtrename.getText().toString();
reext=jtreext.getText().toString();
if(jcbrename.isSelected())
{
temp=tardir.getParent()+"\\"+rename+str2;
}
if(jcbid.isSelected())
{
//temp=temp+String.valueOf(id);
temp=tardir.getParent()+"\\"+rename+String.valueOf(id)+str2;
}
if(jcbreext.isSelected())
{
//temp=temp+reext;
temp=tardir.getParent()+"\\"+str1+reext;
}
try
{
ftemp=new File(temp);
tardir.renameTo(ftemp);
}
catch(Exception exp)
{
System.out.println("改名不成功");
}
return temp;
}
//end给文件改名
//改名按钮
private void jbchange_actionPerformed(ActionEvent e)
{
Vector block=new Vector();
int dizhen=0;//递增参数初始化等于0
if(jtnumber.isEnabled()&&(jtnumber.getText().toString().length()>0))//如果编号文本框可用并且不为空
{
dizhen=Integer.parseInt(jtnumber.getText());//将编号文本框的值赋给变量dizhen
}
for(int i=0;i
{
String temp="";
try
{
JCheckBox tempjcb= (JCheckBox)jpanellist.getComponent(i);//将jpanellist中组件的类型转换成JCheckBox
if (tempjcb.isSelected())//如果被选中
{
File tardir=new File(tempjcb.getText().trim()); //得到文件
if(!tardir.exists())
{
JOptionPane.showMessageDialog(null,"指定的文件不存在!");
}
else
{
try
{
temp= renamefile(tardir,dizhen);//调用renamefile函数将变量dizhen传入函数renamefile
dizhen++;//变量dizhen进行递增
block.add(tardir.getPath()+"..."+temp);
}
catch(Exception exp)
{
JOptionPane.showMessageDialog(null,"可能名称有重复。无法改名");
}
if (temp!="...")
{
tempjcb.setText(temp); //将jpanellist 中JCheckBox的名称改为改名后的文件名
}
}
}
}
catch(Exception exp)
{
JOptionPane.showMessageDialog(null,"找不到需要的组件!");
}
}
write(block);//写入文本
//read();
}
private void jbback_actionPerformed(ActionEvent e)
{
back();
}
private void jtpath_actionPerformed(ActionEvent e)
{
// Add any appropriate code here
}
private void jtname_actionPerformed(ActionEvent e)
{
// Add any appropriate code here
}
private void jcbrename_actionPerformed(ActionEvent e)
{
if(jcbrename.isSelected())
{
jcbid.setEnabled(true);
jtnumber.setEnabled(true);
}
else
{
jcbid.setEnabled(false);
jtnumber.setEnabled(false);
}
}
private void jtrename_actionPerformed(ActionEvent e)
{
}
private void jtreext_actionPerformed(ActionEvent e)
{
// Add any appropriate code here
}
private void jtnumber_actionPerformed(ActionEvent e)
{
// Add any appropriate code here
}
//全选按钮
private void jcballsel_actionPerformed(ActionEvent e)
{
addcheckbox addcb =new addcheckbox();
if(jcballsel.isSelected())
{
addcb.selected(true);
}
else
{
addcb.selected(false);
}
}
//反选按钮
private void jcbresel_actionPerformed(ActionEvent e)
{
for(int i=0;i
{
JCheckBox tempjcb= (JCheckBox)jpanellist.getComponent(i);
if (tempjcb.isSelected())
{
tempjcb.setSelected(false);
}
else
{
tempjcb.setSelected(true);
}
}
}
//删除文件
private void delfile(File tardir)
{
Object[] options={"确定","取消"};
int choose=JOptionPane.showOptionDialog(this,"点击确定将删除:"+tardir.getName(),"警告:如果删除将无法恢复",JOptionPane.OK_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE,null, options, options[0]);
if(choose!=0)
{
return;
}
else
{
tardir.deleteOnExit();
if(tardir.delete())
{
JOptionPane.showMessageDialog(null,"成功删除 "+tardir.getName());
}
else
{
JOptionPane.showMessageDialog(null,"删除不成功");
}
}
}
//增加文件
private void addfile(File tardir)
{
try
{
tardir=new File("","FO.ini");
System.out.println(tardir.toString());
if(tardir.createNewFile())
{
JOptionPane.showMessageDialog(null,"增加成功");
}
}
catch(Exception exp)
{
JOptionPane.showMessageDialog(null,"增加失败");
}
}
//删除按钮事件
private void jbdel_actionPerformed(ActionEvent e)
{
for(int i=0;i
{
JCheckBox tempjcb= (JCheckBox)jpanellist.getComponent(i);//将jpanellist中组件的类型转换成JCheckBox
if (tempjcb.isSelected())//如果被选中
{
File tardir=new File(tempjcb.getText().trim()); //得到文件
delfile(tardir);
}
}
repaintpanell();//重新调整
}
//
// TODO: Add any method code to meet your needs in the following area
//
//jtpath的键盘事件
class myKeyAdapter extends KeyAdapter
{
public void keyPressed(KeyEvent e)
{
switch(e.getKeyCode())
{
case KeyEvent.VK_ENTER:
{
//JOptionPane.showMessageDialog(null," 你按了Enter键!");
repaintpanell();break;
}
}
}
}
//end
private void repaintpanell()
{
File tardir;
jpanellist.removeAll();
jpanellist.repaint();
tardir=new File(jtpath.getText().toString().trim());
if(tardir.isDirectory())
{
addcheckbox add =new addcheckbox();
add.addcheckbox(tardir);
}
}
//搜索文件
public void chosefile(File tardir)
{
String name;
String strname;
String str2;
int count=0;
File[] list=tardir.listFiles();
if(list!=null && list.length>0)
{
for(int x=0;x
{
if(list[x].isFile())
{
name=jtname.getText().trim();
//str1=name.substring(0,name.indexOf("."));
//str2=name.substring(name.indexOf("."));
//System.out.println(str1);
//System.out.println(str2);
//注意indexof的用法!!!!!!!!!!!
strname=list[x].getName().toString().trim();
if(strname.indexOf(name)!=-1 || strname.endsWith(name))
{
System.out.println(list[x].getPath());
statusbar.setText("正在搜索中......");
statusbar.repaint();
//statusbar.setText("");
addcheckbox addjcb =new addcheckbox();
addjcb.addcheckbox(list[x]);
//System.out.println("aa");
count++;
//System.out.println("bb");
tardir=new File(list[x].getPath().trim());
//System.out.println(tardir);
Vector checkboxes =new Vector();
JCheckBox jcb=(JCheckBox)jpanellist.add(new JCheckBox());
checkboxes.addElement(jcb);
jcb.setText(list[x].getPath().toString());
//System.out.println("cc");
}
}
else
{
chosefile(list[x]);
}
}
//JOptionPane.showMessageDialog(null,"找到了"+count+"个文件!");
}
}
//end 搜索文件
//写入ini文件
//写入整
private void blockall(Vector a)//定义写入所有块函数
{
Vector b=new Vector();
try
{
BufferedWriter mybuff= new BufferedWriter(new FileWriter("FO.ini"));
System.out.println("size: "+a.size());
for (int i=0;i
{
try
{
b= (Vector)a.get(i);
blockwrite(b,mybuff); //,true
mybuff.write("[...]");
mybuff.newLine();
}
catch(Exception exp)
{
}
}
mybuff.flush();
mybuff.close();
}
catch(Exception exp)
{
}
}
private void blockwrite(Vector a,BufferedWriter mybuff)//定义块写入函数
{
int i;
String temp;
for (i=0;i<=a.size();i++)
{
try
{
temp=a.get(i).toString();
mybuff.write(temp);
mybuff.newLine();
}
catch(Exception exp1)
{
}
}
}
//写入文件
public void write(Vector OldnameToNewname)
{
Vector vall= new Vector();//存储所有块
Vector vfo = new Vector();//临时数组
String temp,strold;
int flag=0;
try
{
BufferedReader mybuffreader =new BufferedReader(new FileReader("FO.ini"));
temp=mybuffreader.readLine();
if(temp!=null)//如果读一行不为空
{
strold=temp.substring(0,temp.indexOf("..."));//得到旧文件名
File path=new File(strold);
if(path.getParent().trim().compareTo(jtpath.getText().trim())==0)
{
vfo.add(temp);//将temp加入动态数组 vfo
while(true)
{
temp=mybuffreader.readLine();
if(temp==null)//为空就退出
{
break;
}
else
{
if (temp.compareTo("[...]")!=0)//如果读到字符串[...]
{
vfo.add(temp);//将temp加入动态数组 vfo
}
else
{
vall.add(new Vector(vfo)); //动态增加一个动态数组
vfo.clear();//将临时数组清空
flag++;//标志位加一
}
}
}
}
if (flag==10) //如果有十个块
{
vall.remove(0); //清除第一个块
}
vall.add(OldnameToNewname);
}
else
{
vall.add(OldnameToNewname);
}
mybuffreader.close();//关闭
blockall(vall) ; //调用blockall
}
catch(IOException exp)
{
}
}
//end 写入ini文件
// 读出ini文件进行还原操作。
public void back()
{
Vector vfo=new Vector();
Vector vall=new Vector();
String temp;
String strold;
String strnew;
File fold;
File fnew;
int i;
int count;
try
{
BufferedReader myreader =new BufferedReader(new FileReader("FO.ini"));
temp=myreader.readLine();
if(temp==null)//如果文件为空
{
JOptionPane.showMessageDialog(null,"不可以再还原了!");
}
else
{
//把文件全部读入vall,注意上面的temp=myreader.readLine()已经读取了一行
vfo.add(temp);
while((temp=myreader.readLine())!=null)
{
if(temp.compareTo("[...]")!=0)
{
vfo.add(temp);
}
else
{
vall.add(new Vector(vfo)); //动态增加一个动态数组
vfo.clear();//清空临时变量
}
}
vfo=(Vector)vall.lastElement();
count=vfo.size();
for(int x=0;x
{
temp=vfo.get(x).toString();
strold=temp.substring(0,temp.indexOf("..."));//得到旧文件名
strnew=temp.substring(temp.indexOf("...")+3);//得到新文件名
fold=new File(strold);
fnew=new File(strnew);
if (fnew.exists())
{
fnew.renameTo(fold);
}
}
vall.remove(vfo);
blockall(vall);//将vall写入FO.ini
//全部完成刷新界面
repaintpanell();
}
}
catch(IOException e)
{
}
}
//end读出文件进行还原操作。
//============ Inner Classes below =============//
/************************************************/
/* Inner Class: AListener */
/* */
/************************************************/
private class AListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if (source == jbchose) jbchose_actionPerformed(e);
else if (source == jbchange) jbchange_actionPerformed(e);
else if (source == jbback) jbback_actionPerformed(e);
else if(source==jbdel)jbdel_actionPerformed(e);
if (source == jtpath) jtpath_actionPerformed(e);
else if (source == jtname) jtname_actionPerformed(e);
else if (source == jtrename) jtrename_actionPerformed(e);
else if (source == jtreext) jtreext_actionPerformed(e);
else if (source == jtnumber) jtnumber_actionPerformed(e);
else if (source == jcbrename) jcbrename_actionPerformed(e);
if(source==jcballsel)jcballsel_actionPerformed(e);
if(source==jcbresel)jcbresel_actionPerformed(e);
}
}
/************************************************/
/* Inner Class: WListener */
/* */
/************************************************/
private class WListener extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
}
//============================= Testing ================================//
//= =//
//= The following main method is just for testing this class you built.=//
//= After testing,you may simply delete it. =//
//======================================================================//
public static void main(String[] args)
{
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
catch (Exception ex)
{
System.out.println("Failed loading L&F: ");
System.out.println(ex);
}
new PLGM();
}
//MyTreeCellRenderer
class MyTreeCellRenderer extends DefaultTreeCellRenderer
{
public MyTreeCellRenderer()
{
}
public Component getTreeCellRendererComponent(JTree tree,Object value, boolean sel,boolean expanded,boolean leaf,int row,boolean hasFocus)
{
super.getTreeCellRendererComponent(tree,value,sel,expanded,leaf,row,hasFocus);
setIcon(fileSystemView.getSystemIcon(((FileNode)value).getFile()));//得到系统图标
return this;
}
}
//定义一个增加JCheckBoxa的类
class addcheckbox
{
Vector checkboxes =new Vector();
public void addcheckbox(File tardir)
{
if (tardir.exists())
{
File[] file=tardir.listFiles();
if( file!=null && file.length>0)
{
for(int x=0; x
{
if(!file[x].isDirectory())
{
JCheckBox jcb=(JCheckBox)jpanellist.add(new JCheckBox());
checkboxes.addElement(jcb);
jcb.setText(file[x].getPath().toString());
}
}
}
}
}
//判断是否被选择
public void selected(boolean selected)
{
for(int i=0;i
{
try
{
JCheckBox tempjcb= (JCheckBox)jpanellist.getComponent(i);//将jpanellist中组件的类型转换成JCheckBox
tempjcb.setSelected(selected);
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null," 找不到组件! ");
}
}
}
}
//end
}
//end plgm
//定义FileNode
class FileNode extends DefaultMutableTreeNode
{
private boolean explored = false, selected = false;
public FileNode(File file)
{
setUserObject(file);
}
public boolean getAllowsChildren()
{
return isDirectory();
}//反回是否允许有子节点.是否为目录
public boolean isLeaf()
{
return !isDirectory();
}//如果没有子节点就反回true
public File getFile()
{
return (File)getUserObject();
}//反回此节点的对象
public void explore()
{
explore(false);
}//展开
public boolean isExplored()
{
return explored;
}//是否展开
public void setSelected(boolean s)
{
selected = s;
}//选择
public boolean isSelected()
{
return selected;
}//是否被选择
//定义isDirectory函数文件是否为目录
public boolean isDirectory()
{
File file = (File)getUserObject();
return file.isDirectory();
}
//定义toString函数
public String toString()
{
File file = (File)getUserObject();
String filename = file.toString();
int index = filename.lastIndexOf("\\");
return (index != -1 && index != filename.length()-1) ? filename.substring(index+1) : filename;
}
//定义explore函数
public void explore(boolean force)
{
if(!isExplored() || force)
{
File file = getFile();
File[] children = file.listFiles();//反回此目录下的所有字子目录或文件
for(int i=0; i < children.length; ++i)
{
if (children.isDirectory())//如果是目录执行下面的田加语句
{
add(new FileNode(children));//递归增加子目
}
}
explored = true;
}
}
}
//end
批量更名程序.rar
(22 KB, 下载次数: 17)
2008-7-31 11:12 上传
点击文件名下载附件
附件:(源码+已编译Class文件)
下载积分: 吾爱币 -1 CB