欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

File对象的简单应用 File文件扫描文件大小文件路径 

程序员文章站 2022-07-01 16:54:39
...

先看看做出来的效果:
File对象的简单应用
            
    
    
        File文件扫描文件大小文件路径 
       其实实现起来并不困难,也是一个很简单的扫描器。能实现的功能:扫描给定的路径下文件数目、文件夹数目、并显示扫描到的文件名称和路径。  待实现的功能:双击扫描到的文件名能打开该文件或者打开该文件所在目录。

       主要用到的就是File类。File类主要是文件和目录路径名的抽象表示形式,用来构造它的一般是用文件路径或者文件对象。我们经常用的构造函数:File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。对于这种函数很多的类就要对照API来看了。

      第一步:先得把界面写好,界面就是如上图,用到的组件:JLabel     JTextField    JButton    List   为了后续的拓展功能所以将扫描到的文件用List来装。这是我的界面的代码:

package 文件操作;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import java.awt.List;
import java.awt.TextArea;
import java.awt.FlowLayout;
import java.awt.TextField;


public class testUI extends JFrame{
	public String  no1;//标准文件的数量
	public String  no2;//文件夹的数量
	public String  no3;//目录下总大小
	public String  no4;//异常显示
	public static void main(String[] args)
	{
		testUI t1=new testUI();
		t1.InitUI( );
	}
	/**
	 * 初始化UI
	 * 
	 */
	public void InitUI()
	{
		this.setTitle("文件夹属性查看");
		this.setSize(600,600);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocation(400, 100);
		//FlowLayout fly=new FlowLayout();
		//this.setLayout(fly);
		JPanel jf=new JPanel();
		this.add(jf);
		jf.setLayout(null);
		//异常显示
		JLabel JLB7=new JLabel(no3);
		JLB7.setBounds(200, 10, 100, 20);
		jf.add(JLB7);
		//
		JLabel JLB1=new JLabel("文件夹的路径:");
		JLB1.setBounds(30, 30,100 , 30);
		jf.add(JLB1);
		//输入框
		JTextField JTF=new JTextField(30);
		JTF.setBounds(130, 30, 300, 30);
		jf.add(JTF);
		//按钮
		JButton JBT=new JButton("确定");
		JBT.setBounds(450, 30, 100, 30);
		jf.add(JBT);
		//
		JLabel JLB2=new JLabel("标准文件数:");
		JLB2.setBounds(30, 100, 100, 30);
		jf.add(JLB2);
		//显示标准文件个数
		JLabel JLB3=new JLabel(no1);
		JLB3.setBounds(130, 100, 100, 30);
		jf.add(JLB3);
		//
		JLabel JLB4=new JLabel("文件夹的数目:");
		JLB4.setBounds(30, 130, 100, 30);
		jf.add(JLB4);
		//显示文件夹的个数
		JLabel JLB6=new JLabel(no2);
		JLB6.setBounds(150,130, 100, 30);
		jf.add(JLB6);
       //
		JLabel  JLB5=new JLabel("目录内总大小:");
		JLB5.setBounds(30, 160, 100, 30);
		jf.add(JLB5);
		//显示文件总大小
		JLabel  JLB8=new JLabel(no3);
		JLB8.setBounds(150, 160, 150, 30);
		jf.add(JLB8);
		//用来显示扫描到的文件的路径
		List lt=new List ();
		lt.setBounds(30, 200, 500, 250);
		jf.add(lt);


		DoFile d1=new DoFile();
		//给按钮安装监听器
		MyListener my=new MyListener(JTF,d1,JLB3,JLB6,JLB8,JLB7,lt);
		JBT.addActionListener(my);
		this.setVisible(true);
		

	}
	

}

       第二步:写监听器    在给按钮写监听器的时候想想这个监听器要操作哪些对象,那么就需要利用监听器的构造函数来把这些对象传给监听器类,当然也可以在界面类直接用匿名内部类来写监听器,这样的话就不需要构造函数来传值了。

        在按下按钮的时候需要做的事情:

1----把输入框中输入的路径读出来    用到:JTextFile 类的getText() 函数

2----以该路径创建File的对象      用到:File的构造函数

3----扫描该路径下的文件、文件夹     用到:File的listFiles()函数、getAbsolutePath()函数   递归调用

4---将数据显示到指定位置     用到:JTextFile 类的setText()函数、List类的setTex()t函数

本例中我将文件的操作写成了一个类,其实写在监听器中应该会好些,传值就不会那么麻烦了。

文件操作类的代码:

package 文件操作;

import java.awt.Color;
import java.awt.List;
import java.awt.TextArea;
import java.io.File;

import javax.swing.JLabel;
import javax.swing.JTextArea;

public class DoFile {
	
	int count1=0;
	int count2=0;
	long count3=0;
	List JT;
	JLabel JLB;
	/**
	 * 统计文件数目的函数
	 * @param path  文件的路径
	 * @return  标准文件的数量
	 */
	public int FileUity(String path,List jt,JLabel jlb)
	{
		
		File file1=new File(path);
		JT=jt;
		JLB=jlb;
		if(!file1.exists())
		{
			jlb.setBackground(Color.red);
			jlb.setText("该文件目录不存在");
			//System.out.println("该文件目录不存在");
			return 0;
		}
		if(!file1.isDirectory())
		{
			jlb.setText("这不是一个目录");
			//System.out.println("这不是一个目录");
			return 0;
		}
		File[] fs=file1.listFiles();
		for(File f:fs)
		{
			if(f.isFile())
			{
			   count1++;
			   JT.add("找到一个文件:"+f.getAbsolutePath()+"\n");
			   //System.out.println("找到一个文件"+f.getAbsolutePath());
			}
			else if(f.isDirectory())
			{
				FileUity(f.getAbsolutePath(),this.JT,this.JLB);
			    count1=count1++;
			}
			else{	
			}
		}
		
		return count1;
	}
	/**
	 * 统计文件夹的数量
	 * @param path 文件目录
	 * @return 文件夹的个数
	 */
	public int folderUinty(String path,List jt,JLabel jlb)
	{	
		
        File file2=new File(path);
		if(!file2.exists())
		{
			jlb.setText("该文件目录不存在");
			//System.out.println("该文件目录不存在");
			return 0;
		}
		if(!file2.isDirectory())
		{
			jlb.setText("这不是一个目录");
			//System.out.println("这不是一个目录");
			return 0;
		}
		File[] fl=file2.listFiles();
		for(File file : fl)
		{
			if(file.isDirectory())
			{
							
				JT.add("找到一个文件夹:"+file.getAbsolutePath()+"\n");
				//System.out.println("找到一个文件夹");
				count2++;
				String ff=file.getAbsolutePath();
				folderUinty(ff,this.JT,this.JLB);
				count2=count2++;
			}
			else
			{
				
			}
		}
		return count2;
	}
/**
 * 统计该文件目录下的总大小
 * @param path  路径
 * @return 总大小
 */
	public long getSize(String path,JLabel jlb)
	{
		
		
		File file3=new File(path);
		if(!file3.exists())
		{
			jlb.setText("该文件目录不存在");
			//System.out.println("该文件目录不存在");
			return 0;
		}
		if(!file3.isDirectory())
		{
			jlb.setText("这不是一个目录");
			//System.out.println("这不是一个目录");
			return 0;
		}
		File[] ff=file3.listFiles();
		for(File f : ff)
		{
			if(f.isFile())
			{
				long t=f.length();
				count3=t+count3;
			}
			else if(f.isDirectory())
			{
				getSize(f.getAbsolutePath(),this.JLB);
				
			}
		}
		
		
		return count3;
	}
	
	
	

}

 监听器类的代码:

package 文件操作;

import java.awt.List;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class MyListener implements ActionListener{

	public JTextField JTF;
	public DoFile DF;
	public JLabel JL1;//显示标准文件的数目
	public JLabel JL2;//显示文件夹的数目
	public JLabel JL3;//总文件的大小
	public JLabel JL4;//异常显示
	public Integer no1;//标准文件的数目
	public Integer no2;//文件夹的数目
	public Long no3;//总文件的大小
	public List LT;
	/**
	 * 监听器的构造函数
	 * @param JT  输入框的对象
	 */
	 public MyListener(JTextField JT,DoFile df,JLabel jl1,JLabel jl2,JLabel jl3,JLabel jl4,List lt)
	 {
	   this.JTF=JT;
	   this.DF=df;
	   this.JL1=jl1;
	   this.JL2=jl2;
	   this.JL3=jl3;
	   this.JL4=jl4;
	   this.LT=lt;
	   
	 }
	@Override
	public void actionPerformed(ActionEvent arg0)
	{
		//开始前清除原来数据
		this.JL1.setText("");
		this.JL2.setText("");
		this.JL3.setText("");
		this.JL4.setText("");
		this.LT.clear();
		//复位数据
		DF.count1=0;
		DF.count2=0;
		DF.count3=0;
	  //从输入框得到路径
	  String path=JTF.getText();
	    
	    no1=DF.FileUity(path,LT,JL4);
	    String count1=no1.toString();
	    JL1.setText(count1+" "+"个文件");
	   
	    no2=DF.folderUinty(path,LT,JL4);
	    String count2=no2.toString();
	    JL2.setText(count2+" "+"个文件夹");
	 
	    no3=DF.getSize(path,JL4);
		 String count3=no3.toString();
		JL3.setText(count3+" "+"字节");
		
		
		
		
	}
	

}

 本例没有实现的功能:双击扫描到的文件项可以打开该文件所在目录,后续将继续完善!

 

 运行效果:

File对象的简单应用
            
    
    
        File文件扫描文件大小文件路径 
 
 

  • File对象的简单应用
            
    
    
        File文件扫描文件大小文件路径 
  • 大小: 77.5 KB
  • File对象的简单应用
            
    
    
        File文件扫描文件大小文件路径 
  • 大小: 261.3 KB