先看看做出来的效果:
其实实现起来并不困难,也是一个很简单的扫描器。能实现的功能:扫描给定的路径下文件数目、文件夹数目、并显示扫描到的文件名称和路径。 待实现的功能:双击扫描到的文件名能打开该文件或者打开该文件所在目录。
主要用到的就是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+" "+"字节"); } }
本例没有实现的功能:双击扫描到的文件项可以打开该文件所在目录,后续将继续完善!
运行效果:
相关推荐
在Java核心编程中,`File`类的应用广泛,无论是简单的文本文件操作,还是复杂的文件系统遍历,都离不开它的支持。学习并掌握这些基本操作,对于任何Java开发者来说,都是提升工作效率的关键步骤。在实际开发中,结合...
【JAVA编程基础与FileEditor应用】 在JAVA编程领域,FileEditor可以被理解为一个基本的文本编辑器程序,它展示了如何使用JAVA语言进行文件的读取、写入和操作。这个简单的应用程序是初学者了解JAVA I/O流和文件操作...
当然,这只是一个简单的示例,实际应用中可能需要添加错误处理、多文件选择等功能。记住,始终确保对用户输入进行验证,以提高应用程序的安全性和用户体验。在处理用户选择的文件时,应该考虑到文件可能不存在、权限...
对象归档是iOS开发中一个重要的概念,它允许开发者将应用程序中的对象状态持久化存储到文件中,以便在后续的程序运行中恢复这些状态。在iOS中,对象归档是通过NSKeyedArchiver和NSKeyedUnarchiver类来实现的,这两个...
### Java面向对象File I/O详解 #### 概述 在Java中,`File`类是进行文件和目录操作的基础。通过这个类,开发者能够轻松地处理文件系统中的各种任务,如创建、删除文件或目录,读取文件元数据等。本文将深入探讨如何...
以下是一个简单的JavaScript示例,演示如何使用ArcGIS API读取FileGDB中的数据: ```javascript require([ "esri/Map", "esri/views/MapView", "esri/layers/FeatureLayer" ], function(Map, MapView, Feature...
本任务主要关注如何使用File对象来保存账单数据,这是一种简单但基础的数据存储方法。以下是实现这一任务的具体步骤和知识点解析: 1. **数据存储方式**: Android提供了多种数据存储方式,包括SQLite数据库、文件...
在某些情况下,`file_html`类也可以作为一种简单的数据交换格式。例如,在两个系统之间传输HTML文件信息时,可以序列化此类对象并发送给对方系统,然后在接收端反序列化以获取文件名。 ### 总结 综上所述,`file_...
这就是Java简单应用程序的基本流程。`FileEditor`可能还包含了更复杂的文件操作,如文本处理、文件写入、文件追加等。学习Java编程不仅需要理解基本语法,还需要熟悉类库的使用,以及错误处理和资源管理。随着经验的...
在编程环境中,GDAL的Python API使得在脚本或应用中处理FileGDB变得简单。首先,你需要安装GDAL的Python绑定(通常通过`gdal`或`osgeo`库)。下面是一个简单的示例,展示如何打开FileGDB,获取图层信息并遍历特性: ...
在用户通过`<input type="file">`选择文件后,我们可以获取到File对象,它包含了文件的信息,如文件名、大小等。 对于“判断文件是否为空”,我们主要关注文件的大小。一个空文件的大小通常为0字节。因此,我们可以...
- **创建文件对象**:使用`new File()`创建一个指向目标保存位置的File对象,例如`new File("/sdcard", "filesave.png")`。 - **打开输入流和输出流**:对assets中的图片资源,我们需要用`AssetManager`打开一个输入...
总结,`File`类在Android开发中扮演着重要角色,它使得开发者能够方便地管理和操作文件系统,无论是简单的文件创建、删除,还是复杂的文件遍历和读写操作,都离不开`File`类的支持。理解和熟练使用`File`类,是成为...
C#是一种面向对象的编程语言,由微软公司开发,广泛应用于Windows应用开发、Web服务和游戏开发等。在C#中,处理文件操作通常涉及到`System.IO`命名空间中的类和方法。在"Open File"应用中,主要涉及以下知识点: 1....
在移动设备上,HTML5 的 `input type="file"` 是一个关键元素,它允许用户从他们的设备中选择文件,包括照片,以便上传到网站或应用。这个特性在现代Web开发中非常常见,尤其是在构建响应式网页和混合应用程序时。...
FileBrowser控件的使用简单,通常只需要将其添加到项目中,然后通过代码设置初始路径,就可以在界面上显示出文件系统。开发者可能提供了属性和方法供外部调用,例如设置根目录、刷新视图、执行文件操作等。 在实际...
如果不为空,则判断File对象是否为文件夹,如果是文件夹,则使用listFiles()方法获取当前文件夹下的所有文件和子文件夹,然后遍历这些文件和子文件夹。如果不是文件夹,则打印当前文件的名字。 通过这种递归的方式...
本实验报告旨在通过 C++ 语言实现一个简单的通讯录,应用面向对象程序设计的相关知识。实验报告将从三个方面展开:实验目的、实验内容和实验要求。 一、实验目的 通过本实验的学习,使学生熟悉 Visual C++ 6.0 ...
传统的文件上传方式通常限制用户只能选择一个文件,而“单file控件批量上传文件”技术则解决了这一问题,使得用户可以通过一个简单的file输入框一次性选择并上传多个文件。这种功能在社交媒体、电子商务、文档共享等...
File对象的应用 File对象提供了对单个文件的操作方法,包括`Delete`、`Move`、`Copy`等。 ```vb Set file1 = fsoTest.CreateTextFile("C:\temp\myfile.txt") fsoTest.DeleteFile "C:\temp\myfile.txt" ``` #### 六...