- 浏览: 460309 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (126)
- java (37)
- 数据库 (12)
- Ajax (1)
- Struts2 (2)
- Spring (0)
- 软件 (4)
- myeclise (1)
- Linux (3)
- javascript (2)
- jQuery (4)
- android (11)
- Oracle (5)
- js技术 (1)
- HTML表格的动态添加行和删除行 (1)
- android 移动开发指南 (3)
- adnroid HttpURLConnection (1)
- android 程序工程架构 (1)
- android listview 详解 开发指南 带图片 (1)
- AVD位置 (1)
- js 验证 (1)
- java 读取 xml (1)
- POI (1)
- weblogic (1)
- Linux安装jdk 1.6 bin文件 不是rpm (1)
- 11g 不能导出空表的方法 (1)
- 数据库 oracle (1)
- linux ssh配置 (1)
- Linux 新建文件和目录的默认权限 (1)
- linux系统下的weblogic自启动 (1)
- linux 务计划 oracle 远程自动备份 (1)
- Linux系统内存占用90%以上——解决方法 (1)
- 防火墙设置 linux (1)
- oracle 多字段更新 表关联更新 (1)
- oracle 表空间使用量查询 (1)
- ubuntu g++ make: g++: Command not found (1)
- linux系统oracle服务自启动 (1)
最新评论
-
和尚啊和尚:
和尚啊和尚 写道这个真的详细
request 获取各种路径 -
和尚啊和尚:
这个真的详细
request 获取各种路径 -
hujin19861102:
,做目视化看板!学习下先
java 操作 LED DLL 动态链接库 JNaitive -
桃花源记:
你这服务器结果没有处理啊,不能用的!
搜索提示 Suggest -
ihopethatwell:
楼主你写的这个除了 查询之外关闭了数据库,创建,插入,删除 的 ...
android 关系型数据库 SQLiteDatabase的 增 删 改 查
采用多线程自动监视并扫描指定文件夹中的文件变化(文件数的变化和修改日期的变化),,实现其功能的代码由四个java文件组成 :FileListener.java,FileMonitor.java,FileTableModel.java,ParseUtility.java.其具体代码如下:
FileListener.java
package DirectoryScanner; /** * * @author Hale Chou */ public interface FileListener { void dirChanged(FileMonitor monitor); }
FileMonitor.java
package DirectoryScanner; import java.io.File; import java.util.ArrayList; import java.util.List; /** * * @author Hale Chou */ public class FileMonitor implements Runnable { List<FileListener> listenerList = new ArrayList<FileListener>(); private File dir; private long interval; private long lastScanedTime; private int oldLength; public void addListener(FileListener listener) { listenerList.add(listener); } public void start(boolean isDamon) { Thread t = new Thread(this); t.setDaemon(isDamon); t.start(); } public FileMonitor(String _dir, long intervalTime) { File f = new File(_dir); if(!f.isDirectory()) throw new RuntimeException(); //筛选出不是标准文件的目录 File[] fileList = f.listFiles(); for( int i = 0; i < fileList.length; i++ ) { if(fileList[i].isDirectory()) { fileList[i].delete(); } } this.dir = f; this.interval = intervalTime ; this.oldLength = dir.listFiles().length; } public File[] getMonitoredFile() { return this.dir.listFiles(); } public void run() { while(true) { if(!dir.isDirectory()) throw new RuntimeException(); if(filesChanged()) { fireFilesChangedEvent(this); } try { Thread.sleep(interval); }catch(InterruptedException e) { e.printStackTrace(); } } } private void fireFilesChangedEvent(FileMonitor monitor) { for( int i = 0; i < listenerList.size(); i ++ ) { listenerList.get(i).dirChanged(monitor); } } protected boolean filesChanged() { File[] newFiles = dir.listFiles(); if(newFiles.length != oldLength) { oldLength = newFiles.length; //System.out.println(newFiles.length); return true; } for( int i = 0; i < newFiles.length; i++ ) { if(newFiles[i].lastModified() >= lastScanedTime) { return true; } } return false ; } }
FileTableModel.java
package DirectoryScanner; import java.io.File; import javax.swing.table.AbstractTableModel; /** * * @author Hale Chou */ public class FileTableModel extends AbstractTableModel implements FileListener { private File[] files = null ; public FileTableModel(File dir) { files = dir.listFiles(); } public FileTableModel(File[] ff) { this.files = ff; } public int getRowCount() { return files.length; } // Get a column's name. @Override public String getColumnName(int col) { String s = "文件名,路径,大小,修改时间"; return s.split(",")[col]; } public int getColumnCount() { return 4; } public Object getValueAt(int rowIndex, int columnIndex) { File f = files[rowIndex]; if(f.isDirectory()){ f.delete(); }else{ switch(columnIndex){ case 0 : return f.getName(); case 1 : return f.getPath(); case 2 : return ParseUtility.bytes2kb(f.length()); case 3 : return ParseUtility.toYYYYMMDDHHMMSS(f.lastModified()); } } return ""; } public void dirChanged(FileMonitor monitor) { this.files = monitor.getMonitoredFile(); fireTableDataChanged(); } }
ParseUtility.java
package DirectoryScanner; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; /** * * @author Administrator */ public class ParseUtility { public ParseUtility(){ } public static String toYYYYMMDDHHMMSS(long time) { SimpleDateFormat format = new SimpleDateFormat("M月d日H时m分s秒"); return format.format(new Date(time)); } public static String bytes2kb(long bytes) { BigDecimal filesize = new BigDecimal(bytes); BigDecimal megabyte = new BigDecimal(1024 * 1024); float returnValue = filesize.divide(megabyte, 2 , BigDecimal.ROUND_UP).floatValue(); if (returnValue > 1) return(returnValue + " MB"); BigDecimal kilobyte = new BigDecimal(1024); returnValue = filesize.divide(kilobyte, 2 , BigDecimal.ROUND_UP).floatValue(); return (returnValue + " KB"); } }
最后是调用程序
package file; import java.io.File; import javax.swing.table.TableModel; import javax.swing.JFileChooser; import javax.swing.event.*; import DirectoryScanner.*; /** * * @author Hale Chou */ public class FileMonitorTest extends javax.swing.JFrame { public TableModel tableModel; /** Creates new form FileMonitorTest */ public FileMonitorTest() { initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); jLabel1 = new javax.swing.JLabel(); txt_FilesCount = new javax.swing.JTextField(); jLabel2 = new javax.swing.JLabel(); txt_ScannedDirectory = new javax.swing.JTextField(); btn_StartScan = new javax.swing.JButton(); btn_SelectDirectory = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTable1.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { } )); jScrollPane1.setViewportView(jTable1); jLabel1.setText("当前文件数:"); txt_FilesCount.setEditable(false); jLabel2.setText("选择文件夹:"); btn_StartScan.setText("开始监视"); btn_StartScan.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btn_StartScanActionPerformed(evt); } }); btn_SelectDirectory.setText("选择目录"); btn_SelectDirectory.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btn_SelectDirectoryActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(txt_ScannedDirectory, javax.swing.GroupLayout.PREFERRED_SIZE, 198, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(btn_SelectDirectory) .addContainerGap(31, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(txt_FilesCount, javax.swing.GroupLayout.PREFERRED_SIZE, 198, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(btn_StartScan) .addContainerGap(31, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel2) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(txt_ScannedDirectory, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(btn_SelectDirectory))) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel1) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(txt_FilesCount, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(btn_StartScan))) .addContainerGap(48, Short.MAX_VALUE)) ); pack(); }// </editor-fold> private void btn_SelectDirectoryActionPerformed(java.awt.event.ActionEvent evt) { JFileChooser fc = new JFileChooser(); fc.setDialogTitle("Select Directory"); //fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); int returnVal = fc.showOpenDialog(FileMonitorTest.this); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = fc.getSelectedFile(); txt_ScannedDirectory.setText(file.getPath()); } else { } } private void btn_StartScanActionPerformed(java.awt.event.ActionEvent evt) { String directory = txt_ScannedDirectory.getText(); FileMonitor fileMonitor = new FileMonitor(directory, 100); tableModel = new FileTableModel(new File(directory)); fileMonitor.addListener((FileListener)tableModel); fileMonitor.start(true); jTable1.setModel(tableModel); tableModel.addTableModelListener(new TableModelListener() { public void tableChanged(TableModelEvent e) { if(tableModel.getRowCount()>0){ txt_FilesCount.setText(String.valueOf(tableModel.getRowCount())); } else{ txt_FilesCount.setText("shit,have nothing in it!"); } } }); } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new FileMonitorTest().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton btn_SelectDirectory; private javax.swing.JButton btn_StartScan; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; private javax.swing.JTextField txt_FilesCount; private javax.swing.JTextField txt_ScannedDirectory; // End of variables declaration }
发表评论
-
java时间格式大全
2011-08-03 10:18 1040java.util.*;import java.text.*; ... -
错误:Cannot find bean under name org.apache.struts.taglib.html.BEAN
2011-06-25 15:49 1257把<form action> 改成<html ... -
request 获取各种路径
2011-06-13 15:47 92304从request获取各种路径总结 request.getRea ... -
jsp 页面的打印功能
2011-02-24 17:28 1000response设置如下属性即可 response.setHe ... -
dom4j 对xml操作
2011-02-14 16:13 1044package com.wasu.var.common.uti ... -
Java 中如何进行 BASE64 编码和解码
2010-12-31 09:22 1093BASE64 编码是一种常用的字符编码,在很多地方都会用到。J ... -
PO BO VO DTO POJO DAO概念及其作用
2010-11-20 22:34 875J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手讨 ... -
两个系统
2010-11-15 14:37 9121.Epg 电视播放用的。 2.视频文件管理 FN -
java 移动文件
2010-10-15 15:22 1040//文件原地址 File oldFile = new ... -
技巧分享 Linux下查看某端口占用进程
2010-07-12 16:42 3329在Linux操作系统中 查看占用某一端口的进程是什么:#ls ... -
判断当前操作系统是 windows 还是 linux
2010-07-08 11:27 2723需要在windows 和 linux 上都能用。 所以就需要自 ... -
执行./startup.sh出现permission denied
2010-07-05 15:07 3064在执行./startup.sh,或者./s ... -
mysql 插入当前时间
2010-06-30 10:21 1097now()函数以`yyyy-mm-dd hh:mm:ss返回当 ... -
获取文件大小 File
2010-06-29 11:44 1664通过File的 length()方法数值传入 获取文件大小 ... -
使用Java操作文本文件的方法详解
2010-06-24 16:13 1055最初Java是不支持对文本文件的处理的,为了弥补这个缺憾而引入 ... -
java properties配置文件的使用
2010-06-24 14:02 1215java properties配置文件的使用 把配置文件放到s ... -
javaIO流 文本文件读写
2010-06-24 11:19 1649/* * 简单的读/写文本文件的示例 * 这里包含了三个例 ... -
overload和override的区别
2010-06-17 15:42 1092overload和override的区别 override(重 ... -
Log4j的使用
2010-06-11 14:33 9091、 Log4j是什么? Log4j可以帮助调试(有时候d ... -
Hibernate 下载地址
2010-06-11 11:36 1924http://www.mirrorservice.org/si ...
相关推荐
在这个特定的项目中,“VBA写的检测特定目录下文件夹以及文件的更新情况表”是一个利用VBA编写的程序,用于监测指定文件夹及其子文件夹内的文件状态变化,如新增、修改或删除。 该程序的核心功能可能包括以下几个...
当文件夹中的文件发生变化时,程序将触发相应的事件处理函数。 2. **文件系统API调用**:在易语言中,可以通过调用操作系统提供的API函数来获取文件或文件夹的变更信息。例如,Windows API中的`...
首先,文件夹的备份是指将一个或多个文件夹中的所有文件及其结构复制到另一个位置,以备不时之需。备份的目的在于防止数据丢失,例如硬件故障、病毒攻击或意外删除。在VC++中,可以使用Windows API函数如`CopyFile`...
包括了名称(NetBIOS名或者DNS名)、IP地址、MAC地址、工作组名、用户名称、操作系统类型、服务器类型、备注、共享文件夹、隐藏共享、共享打印机、共享文件夹的属性(是否可写、只读或者密码保护等)、共享备注等,而且...
实例23 如何监视文件和文件夹系统变化情况 实例24 如何加解密文件 实例25 如何切分组合文件 实例26 如何以流式方式读写文本文件 实例27 如何直接打印文件 实例28 如何操作帮助文件 实例29 如何操作word文件 ...
│ │ ├─实例15 如何获取指定文件的根信息 │ │ ├─实例16 如何获取当前程序所在的文件夹 │ │ ├─实例17 如何获取指定文件夹下的所有文件 │ │ ├─实例18 如何获取指定文件夹下的所有文件夹 │ │ ├─实例...
实例66 文件夹中的文件列表 实例67 读写文本文件 实例68 读写二进制文件 实例69 显示系统日期与时间(1) 实例70 显示差值的日期与时间(2) 实例71 时钟发生器应用 实例72 在.NET程序设计中使用ATL 实例73 ...
chap09-多线程 ├─D00-多线程 ├─Windows多线程编程技术与实例 ... ... ├─多线程,多接收模式串口类 ├─多线程文件传输 ├─多线程的日志记录DLL ├─多线程端口扫描程序 ├─多...
chap09-多线程 ├─D00-多线程 ├─Windows多线程编程技术与实例 ... ... ├─多线程,多接收模式串口类 ├─多线程文件传输 ├─多线程的日志记录DLL ├─多线程端口扫描程序 ├─多...
cc实例155 批量改变指定文件的属性 5.8 加密与解密 cc实例156 文件的加密与解密 cc实例157 文件夹加密 5.9 其他文件管理知识 cc实例158 文件分割器 cc实例159 帮助文件 cc实例...
cc实例155 批量改变指定文件的属性 5.8 加密与解密 cc实例156 文件的加密与解密 cc实例157 文件夹加密 5.9 其他文件管理知识 cc实例158 文件分割器 cc实例159 帮助文件 cc实例...
- 用户可以指定文件夹进行监控,设置各种监控选项,如文件行为记录,并将设置保存在Config.ini配置文件中。 - 监控到的文件修改记录可以保存并导出,右键菜单提供了查看文件的操作选项。 5. **系统需求**: - ...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
VC++搜索指定文件夹中的文件 VC++文件分割、合并工具 自绘了Button、CProgressCtrl、CAutoFont。主要操作在CFileSpltDlg中。 vc++写的音乐播放器 VC++制作3D效果的旋转文字特效 VC++注册码加密源程序(含注册机...
实例23 如何监视文件和文件夹系统变化情况 实例24 如何加解密文件 实例25 如何切分组合文件 实例26 如何以流式方式读写文本文件 实例27 如何直接打印文件 实例28 如何操作帮助文件 实例29 如何操作Word文件 实例30 ...
VC++搜索指定文件夹中的文件 VC++文件分割、合并工具 自绘了Button、CProgressCtrl、CAutoFont。主要操作在CFileSpltDlg中。 vc++写的音乐播放器 VC++制作3D效果的旋转文字特效 VC++注册码加密源程序(含注册机...
SoftPerfect Network Scanner是一款专业好用的的多线程的IP,NetBIOS和SNMP的扫描仪。该软件是专门为系统管理员和对计算机安全感兴趣的普通用户而设计的。可以实现利用计算机的网络接口捕获流经本机网络上数据报文,...
VC++搜索指定文件夹中的文件 VC++文件分割、合并工具 自绘了Button、CProgressCtrl、CAutoFont。主要操作在CFileSpltDlg中。 vc++写的音乐播放器 VC++制作3D效果的旋转文字特效 VC++注册码加密源程序(含注册机...