java swt 保存文件夹_采用SWT实现系统文件夹的树形结构显示
/**
* 使用SWT實現(xiàn)的系統(tǒng)文件夾目錄的顯示,并讀取文件夾目錄下文件的大小(格式化顯示)
* 實現(xiàn)選擇文件夾、打印文件夾名、文件夾的絕對路徑
* 顯示選準(zhǔn)的文件所在的路徑,不顯示隱藏文件路徑
*/
package test;
import java.io.File;
import java.text.NumberFormat;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.swt.SWT;
public class Treetest {
//類似資源管理器的樹,其中包含鼠標(biāo)雙擊事件
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("系統(tǒng)文件夾目錄的Tree顯示");
shell.setLayout(new FillLayout(SWT.VERTICAL));
final Tree tree = new Tree(shell, SWT.BORDER);
TreeItem computer = new TreeItem(tree, SWT.NONE);
computer.setText("我的電腦");
Image computericon = new Image(shell.getDisplay(),
"icons//mycomputer.png");// 創(chuàng)建圖像
computer.setImage(computericon);
//返回可獲得的文件根目錄,即本地文件系統(tǒng)結(jié)構(gòu)的最頂層(如Windows平臺上的盤符)
File[] roots = File.listRoots();
for (int i = 0; i < roots.length; i++) {
//??? ??? ??? ??? TreeItem root = new TreeItem(tree, 0);
TreeItem root = new TreeItem(computer, 0);
root.setText(roots[i].toString());
root.setData(roots[i]);//保存當(dāng)前節(jié)點數(shù)據(jù)
Image cdicon = new Image(shell.getDisplay(), "icons//系統(tǒng)磁盤.png");// 創(chuàng)建磁盤圖像
root.setImage(cdicon);
new TreeItem(root, 0);//把當(dāng)前節(jié)點作為目錄節(jié)點
}
tree.addListener(SWT.Expand, new Listener() {
public void handleEvent(final Event event) {
final TreeItem root = (TreeItem) event.item;
TreeItem[] items = root.getItems();
for (int i = 0; i < items.length; i++) {
if (items[i].getData() != null)
return;
items[i].dispose();
}
File file = (File) root.getData();
File[] files = file.listFiles();//返回File對象(文件夾與文件)的數(shù)組
//采用文件夾目錄過濾器來判斷當(dāng)前路徑是否為文件夾,返回File對象(文件夾)的數(shù)組
//File[] files = file.listFiles(new DirFilter());
// 列出該目錄中的文件名與文件夾名,返回一個文件名數(shù)組
// String[] filespath=file.list();
// for (int i = 0; i < filespath.length; i++) {
// System.out.println("文件為: " + filespath[i]);
// }
if (files == null)
return;
for (int i = 0; i < files.length; i++) {
//不顯示隱藏文件的路徑
//if(files[i].isHidden()==false){//判斷當(dāng)前路徑的文件是否為隱藏文件
if ((files[i].isHidden() == false)
&& (files[i].isFile() == false)) {//判斷當(dāng)前路徑是否為隱藏文件與文件夾
TreeItem item = new TreeItem(root, 0);
item.setText(files[i].getName());
//葉子節(jié)點對應(yīng)的數(shù)值為相應(yīng)文件夾的File對象
item.setData(files[i]);
Image foldericon = new Image(shell.getDisplay(),
"icons//文件夾圖標(biāo).png");// 創(chuàng)建文件夾圖像
item.setImage(foldericon);
//當(dāng)前為文件目錄而不是文件的時候,添加新項目,以便只是顯示文件夾(包括空文件夾),而不顯示文件夾下的文件
if (files[i].isDirectory()) {
new TreeItem(item, 0);
}
}
}
}
});
//??? ??? 鼠標(biāo)單擊選擇樹的葉子節(jié)點事件
final Treetest tr = new Treetest();
tree.addListener(SWT.MouseDown, new Listener() {
public void handleEvent(Event event) {
Point point = new Point(event.x, event.y);
TreeItem item = tree.getItem(point);
if ((item != null) && (item.getData() != null)) {
System.out.println("您選中的文件夾名是:" + item.getText());
File s = (File) item.getData();
// 得到本地的缺省格式
NumberFormat nf = NumberFormat.getInstance();
double fsizebyte = (double) tr.getDirectorySize(s);
System.out.println("您選中的文件夾大小是:" + nf.format(fsizebyte)
+ "字節(jié)");
double fsizemb = (double) tr.getDirectorySize(s) / 1024;
System.out.println("您選中的文件夾大小是:" + nf.format(fsizemb)
+ "MB");
System.out.println("您選中的文件夾路徑是:" + item.getData());
}
}
});
//根據(jù)Tree的大小更改shell的大小
Point size = tree.computeSize(300, SWT.DEFAULT);
int width = Math.max(300, size.x);
int height = Math.max(300, size.y);
shell.setSize(shell.computeSize(width, height));
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
/**
* 計算文件夾目錄下文件的整體大小(單位為:字節(jié))
*/
public long getDirectorySize(File dir) {
long retSize = 0;//文件夾目錄下文件的大小
if ((dir == null) || !dir.isDirectory()) {
return retSize;
}
File[] entries = dir.listFiles();
int count = entries.length;
for (int i = 0; i < count; i++) {
if (entries[i].isDirectory()) {
retSize += getDirectorySize(entries[i]);
} else {
retSize += entries[i].length();
}
}
return retSize;
}
總結(jié)
以上是生活随笔為你收集整理的java swt 保存文件夹_采用SWT实现系统文件夹的树形结构显示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机主板另一个名称,主板名称太复杂 看
- 下一篇: php 发送post请求json,thi