只是打开而已吗,那只需要一行代码就能搞定。
创新互联2013年开创至今,先为双峰等服务建站,双峰等地企业,进行企业商务咨询服务。为双峰企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
Runtime.getRuntime().exec("explorer.exe");
如果需要在java中实现弹出文件选择框,那可以使用如下代码:
JFileChooser fd = new JFileChooser();
fd.setFileSelectionMode(JFileChooser.OPEN_DIALOG);
fd.showOpenDialog(null);
File f = fd.getSelectedFile();
if (f != null) {
System.out.println(f.getPath());
}
给你一个例子
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.util.EventObject;
public class FileExplorer extends JFrame{
public FileExplorer(){
final JTree tree = new JTree(createTreeModel());
JScrollPane scrollPane = new JScrollPane(tree);
getContentPane().add(scrollPane, BorderLayout.CENTER);
getContentPane().add(GJApp.getStatusArea(), BorderLayout.SOUTH);
tree.addTreeExpansionListener(new TreeExpansionListener(){
public void treeCollapsed(TreeExpansionEvent e){
}
public void treeExpanded(TreeExpansionEvent e){
UpdateStatus updateThread;
TreePath path = e.getPath();
FileNode node = (FileNode)path.getLastPathComponent();
if(!node.isExplored()){
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
GJApp.updateStatus("exploring...");
UpdateStatus us = new UpdateStatus();
us.start();
node.explore();
model.nodeStructureChanged(node);
}
}
class UpdateStatus extends Thread{
public void run(){
try{
Thread.currentThread().sleep(450);
}catch(InterruptedException e){}
SwingUtilities.invokeLater(new Runnable(){
public void run(){
GJApp.updateStatus("");
}
});
}
}
});
}
private DefaultTreeModel createTreeModel(){
File root = new File("C:/");
FileNode rootNode = new FileNode(root);
FileNode node;
rootNode.explore();
return new DefaultTreeModel(rootNode);
}
public static void main(String[] args){
GJApp.launch(new FileExplorer(), "JTree File Explorer", 300, 300, 450, 400);
}
}
class FileNode extends DefaultMutableTreeNode{
private boolean explored = false;
public FileNode(File file){
setUserObject(file);
}
public boolean getAllowsChildren(){
return isDirectory();
}
public boolean isLeaf(){
return !isDirectory();
}
public File getFile(){
return (File)getUserObject();
}
public boolean isExplored(){
return explored;
}
public boolean isDirectory(){
File file = getFile();
return file.isDirectory();
}
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;
}
public void explore(){
if(!isExplored()){
File file = getFile();
File[] children = file.listFiles();
for(int i=0;ichildren.length;i++){
add(new FileNode(children[i]));
}
explored = true;
}
}
}
这个要看你是怎么实现的TreeModel,无非三种方式:
1.
自己实现TreeModel,这样的话,节点对象就可以直接使用File对象。获取路径也就不成问题了。
2.
自己实现treeNode接口,这样的话,可以在treeNode接口中增加File对象的引用。
3.
用defaultMutableTreeNode来实现的,那么,可以使用setUserObject的方法,将File对象设置在TreeNode中,然后就可以在得到节点后,使用getUserObject来获取了。
大致如此吧,估计你用的是第3种,因为很少有人愿意重写TreeCellRenderer的,呵呵。但最佳的办法其实就是第一种。