在使用图形界面操作系统时,当打开一个文件夹系统会自动列出该文件夹下的所有文件及子文件夹。本实例实现了类似的功能:首先让用户选择一个文件夹,程序会动态列出该文件夹下的所有文件;如果该文件是隐藏文件,就在属性栏中显示“隐藏文件”。要用到进度条来表示是否完成。

思路如下:

首先是视图层。JTextField、JButton、JScrollPane、JTable神马的就不用再提了,都是老盆友了,在这里因为要用到进度条,所以会有一个新盆友:JProgressBar控件。控件们自然是要作为成员变量创建对象的,此外还要有File型成员变量来代表选中的文件夹。

这个实例只涉及了一个控件的事件,那就是选择文件夹按钮。在它的事件里,选择文件夹及列出信息神马的都是老生常谈了,关键是JProgressBar控件的用法。在用户选择文件夹后,使用JProgressBar控件的setIndeterminate(true)方法设置滚动条开始滚动;在文件信息显示完毕后,再通过JProgressBar控件的setIndeterminate(false)方法停止滚动条的滚动。

代码如下:

import java.awt.BorderLayout;

import java.awt.EventQueue;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.File;

import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JProgressBar;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.JTextField;

import javax.swing.border.EmptyBorder;

import javax.swing.table.DefaultTableModel;

import javax.swing.UIManager;

public class FileListFrame extends JFrame {

/**

*

*/

private static final long serialVersionUID = -615665572894071265L;

private JPanel contentPane;

private JTextField chooseTextField;

private JButton chooseButton;

private JScrollPane scrollPane;

private JTable table;

private JProgressBar progressBar;

private File chooseFile;

/**

* Launch the application.

*/

public static void main(String[] args) {

try {

UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

} catch (Throwable e) {

e.printStackTrace();

}

EventQueue.invokeLater(new Runnable() {

public void run() {

try {

FileListFrame frame = new FileListFrame();

frame.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

/**

* Create the frame.

*/

public FileListFrame() {

setTitle("\u7A97\u4F53\u52A8\u6001\u52A0\u8F7D\u78C1\u76D8\u6587\u4EF6");

addWindowListener(new WindowAdapter() {

@Override

public void windowActivated(WindowEvent arg0) {

do_this_windowActivated(arg0);

}

});

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setBounds(100, 100, 450, 300);

contentPane = new JPanel();

contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

setContentPane(contentPane);

contentPane.setLayout(new BorderLayout(0, 0));

JPanel panel = new JPanel();

contentPane.add(panel, BorderLayout.NORTH);

chooseTextField = new JTextField();

panel.add(chooseTextField);

chooseTextField.setColumns(13);

chooseButton = new JButton("\u9009\u62E9\u6587\u4EF6\u5939");

chooseButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {

do_chooseButton_actionPerformed(arg0);

}

});

panel.add(chooseButton);

progressBar = new JProgressBar();

panel.add(progressBar);

scrollPane = new JScrollPane();

contentPane.add(scrollPane, BorderLayout.CENTER);

table = new JTable();

scrollPane.setViewportView(table);

}

protected void do_chooseButton_actionPerformed(ActionEvent arg0) {

JFileChooser fileChooser = new JFileChooser();

fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

fileChooser.setMultiSelectionEnabled(false);

int result = fileChooser.showOpenDialog(this);

if (result == JFileChooser.APPROVE_OPTION) {

chooseFile = fileChooser.getSelectedFile();// 获得用户选择的文件夹

chooseTextField.setText(chooseFile.getAbsolutePath());// 显示用户选择的文件夹

progressBar.setIndeterminate(true);// 设置滚动条开始滚动

final File[] subFiles = chooseFile.listFiles();// 获得用户选择的文件夹中的所有文件(夹)

final DefaultTableModel model = (DefaultTableModel) table.getModel();

model.setRowCount(0);// 清空表格

new Thread() {// 开始新的线程

public void run() {

for (int i = 0; i < subFiles.length; i++) {// 遍历用户选择的文件夹

if (subFiles[i].isFile()) {// 判断是否是一个文件

Object[] property = new Object[3];

property[0] = i + 1;// 保存序号

property[1] = subFiles[i].getName();// 保存文件名

property[2] = "";

if (subFiles[i].isHidden()) {// 判断是否是一个隐藏文件

property[2] = "隐藏文件";

}

model.addRow(property);// 向表格中添加记录

table.setModel(model);// 更新表格

}

try {

Thread.sleep(100);// 线程休眠0.1秒实现动态加载

} catch (InterruptedException e) {

e.printStackTrace();

}

}

progressBar.setIndeterminate(false);// 停止进度条滚动

};

}.start();

}

}

protected void do_this_windowActivated(WindowEvent arg0) {

DefaultTableModel model = (DefaultTableModel) table.getModel();

model.setColumnIdentifiers(new Object[] { "序号", "文件名", "属性" });

}

}

效果如图:

java 动态读取文件_Java窗体动态加载磁盘文件的实现方法相关推荐

  1. Java 提示“找不到或无法加载主类” 解决方法

    Java 提示"找不到或无法加载主类" 解决方法 参考文章: (1)Java 提示"找不到或无法加载主类" 解决方法 (2)https://www.cnblog ...

  2. java scanner 读取文件_Java读取文本文件

    有很多方法可以在java中读取文本文件.下面我们来逐个看看java中读取文本文件的几个方法. 在java中有很多读取文本文件的方法.文本文件由字符组成,因此可以使用Reader类.在java中读取文本 ...

  3. java io读取文件_java io读取文件操作代码实例

    这篇文章主要介绍了java io读取文件操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 主要分为字节读取和字符读取,字节读取可以一个一个 ...

  4. java逐行读取文件_Java逐行读取文件

    java逐行读取文件 Today we will look into different java read file line by line methods. Sometimes we have ...

  5. java类加载器顺序_java中类的加载顺序介绍(ClassLoader)

    1.ClassNotFoundExcetpion 我们在开发中,经常可以遇见java.lang.ClassNotFoundExcetpion这个异常,今天我就来总结一下这个问题.对于这个异常,它实质涉 ...

  6. java 类加载生命周期_Java类的加载与生命周期

    一.概要: 类的生命周期从类的 加载.连接.初始化 开始,到类的 卸载结束: 二.几个阶段: 加载:查找并加载类的二进制数据.(把类的.class文件的二进制数据读入内存,存放在运行时数据区的方法区: ...

  7. java类 连接时机_java类的加载时机

    类加载 它直接表现出来的代码应该是 ClassLoader.getSystemClassLoader().loadClass("com.my.test.AbcClass").所以具 ...

  8. java owl文件_java – 用Jena加载owl文件

    我用Jena作为OntModel加载了几个OWL文件(RDF / XML序列化). 对于某些文件,我在使用ontoModel.read()读取它们时会出错: 线程"main"中的异 ...

  9. java创建读取文件_Java实现文件的创建、读取、写入操作-Fun言

    在日常的开发中,对文件的操作经常会有,所以今天教大家其中一种使用Java实现文件的创建.读取.写入操作 创建文件String filenameTemp = "D:\demo.txt" ...

最新文章

  1. 和12岁小同志搞创客开发:如何选择合适的控制器?
  2. python安装教程windows-windows上安装Anaconda和python的教程详解
  3. 华为智能手环智能手表软件测试,一块智能手表的测试之旅,揭秘华为运动健康科学实验室...
  4. 硬盘对应计算机主板,主板硬盘一般有哪些接口
  5. Mock完成单元测试
  6. SQL server 第三方驱动 JDTS
  7. 字节大牛教你手撕Java学习,Java核心知识点
  8. [算法] 循环有序数组查找递归实现
  9. 一阶低通滤波器方程_一阶RC低通滤波器和RC高通滤波器简介-模拟/电源-与非网...
  10. Oracle使用sqluldr2
  11. Win7英文版打补丁遇到的问题汇总
  12. 大数据监测及预警系统平台怎么选择的方法参考
  13. 盒子综合案例——德云社十八愁与宠物知识栏
  14. 计算机软件编程英语词汇集锦一
  15. css实现三角箭头(兼容IE6)
  16. latex formula
  17. 手把手教你整合SSM实现一个简单的CRUD项目
  18. 《魔兽争霸》故事背景
  19. Warshall 算法(离散数学传递闭包)
  20. 2022年终总结(学习篇)

热门文章

  1. 语音识别|基于CNN+DFSMN(简化版:标量+无步长因子)的声学模型实现及代码开源(keras)
  2. git中的fork应该这样使用
  3. 设置CentOS7的grub密码
  4. 企业级java b2bc商城系统开源源码二次开发(二十一)springboot集成JMS
  5. 更多的结构化命令(第十三章)
  6. 独立重复实验与二项分布
  7. Oracle数据库的关闭详解
  8. 离开网易的转型之路1:选择测试之路-路上的迷茫
  9. Spring Cloud Config配置中心的使用
  10. 第三届山西省赛1004 一道大水题(scanf)