现在实现一个通过面板统计相应磁盘目录下对应扩展名的文件个数,比如我要实先找到C盘下exe文件的个数。
大致思路是:先创建一个面板,面板上添加下拉框,供选择所需要查找的对象,添加一个搜索按钮,给按钮添加监听器。当点击按钮时,搜索到要找的文件统计其个数。
看看下面的代码:
package cn.netjava;
import java.awt.BorderLayout;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import javax.swing.*;
public class FileTest01{
private static final int SCROLLBARS_BOTH = 0;
Choice ch_1;
Choice ch_2;
TextArea ta;
//程序入口
public static void main(String[] args) throws Exception{
//实例化一个File对象
FileTest01 fl=new FileTest01();
fl.intiGui();
}
/**
* 打印的目录下文件名
* @param string
* @return 文件的个数
*/
public int printDir(String dirName,String type) {
//定义文件个数,赋值为0
int fileCount=0;
File dirFile=new File(dirName);
File[] subFile=dirFile.listFiles();//列表目录
if(null==subFile||subFile.length==0)
return 0;
//遍历子一级目录
for(int i=0;i<subFile.length;i++){
if(subFile[i].isDirectory()){
String subDir=subFile[i].getAbsolutePath();
//System.out.println("目录"+subDir);
//如果还是目录调用同样的方法计算,递归
fileCount+=printDir(subDir,type);
}
if(subFile[i].isFile()){
String fileName=subFile[i].getAbsolutePath();
if(istype(fileName,type)){
ta.append(fileName+"\n");
//System.out.println("文件:"+fileName);
fileCount++;}
}
}
return fileCount;
}
//判断文件的类型
private boolean istype(String fileName, String type) {
String tempType = "";
for(int i=fileName.length()-1;i>0;i--){
if(fileName.charAt(i)!='.'){
tempType = fileName.charAt(i) + tempType;
}
else break;
}
if(tempType.equals(type))
return true;
else
return false;
}
/**
* 初始化一个图形界面的方法
*/
private void intiGui() {
//创建一个窗体
JFrame jf=new JFrame();
//设置窗体的名字
jf.setTitle("统计文件");
//设置窗体的大小
jf.setSize(500, 350);
//设置关闭窗体时程序退出
jf.setDefaultCloseOperation(3);
//设置窗体显示在中央
jf.setLocationRelativeTo(null);
jf.getContentPane().setBackground(Color.red);
//创建一个北面面板
JPanel northpane=new JPanel();
//设置面板的大小
northpane.setPreferredSize(new Dimension(0,50));
northpane.setBackground(Color.green);
//将北面面板添加到窗体上
jf.add(BorderLayout.NORTH,northpane);
//实例化标签1
JLabel jl_1=new JLabel("路径");
northpane.add(jl_1);
//创建下拉列表框
ch_1=new Choice();
northpane.add(ch_1);
ch_1.add("E盘");
ch_1.add("C盘");
ch_1.add("F盘");
ch_1.add("G盘");
//实例化标签2
JLabel jl_2=new JLabel("文件名");
northpane.add(jl_2);
//实例化一个文本框
JTextField jtf=new JTextField("学习",8);
//将文本框加到northpane上
northpane.add(jtf);
//实例化标签3
JLabel jl_3=new JLabel("扩展名");
//将标签添加到northpane上
northpane.add(jl_3);
//实例化下拉框2
ch_2=new Choice();
ch_2.add("dmg");
ch_2.add("doc");
ch_2.add("exe");
ch_2.add("pdf");
northpane.add(ch_2);
//创建一个中间面板
JPanel centerpane=new JPanel();
//将中间面板添加到窗体上
jf.add(centerpane);
//新建一个多行文本框
ta = new TextArea("",15,60, SCROLLBARS_BOTH);
//将多行文本框添加到centerpane上
//ta.append("0000000000000000000"+'\n');
centerpane.add(ta);
//实例化一个按钮
JButton jb=new JButton("搜索");
northpane.add(jb);
//添加一个鼠标监听器
jb.addMouseListener(new MouseAdapter(){
//当鼠标点击时
public void mouseClicked(MouseEvent e) {
//对第一个下拉框判断要找的磁盘
String path=null;
String st1 = ch_1.getSelectedItem();
if(st1.equals("C盘")){
path = "C:";
}else if(st1.equals("E盘")){
path="E:";
}else if(st1.equals("F盘")){
path="F:";
}else if(st1.equals("G盘")){
path="G:";
}
//对第二个下拉框判断要找的文件类型
String type=null;
String st2 = ch_2.getSelectedItem();
if(st2.equals("pdf")){
type = "pdf";
}else if(st2.equals("dmg")){
type="dmg";
}else if(st2.equals("exe")){
type="exe";
}else if(st2.equals("doc")){
type="doc";
}
int count=printDir(path,type);;
System.out.println(path+"目录下共找到文件个数是:"+count);
}
});
jf.setVisible(true);
}
}
运行的结果如图。