现在项目就要纳品了,没有什么事情可做.写些简单的东西玩.打算辞职,但总是下不定决心. 可能是在这个公司太安逸了, 把人都养懒了.
        一旦适应了舒适的生活, 就失去了斗争的心.哎!

  1 package  file;
  2
  3 import  java.awt.Dimension;
  4 import  java.awt.Toolkit;
  5 import  java.io.File;
  6 import  java.util.ArrayList;
  7 import  java.util.List;
  8
  9 import  javax.swing.JFrame;
 10 import  javax.swing.JScrollPane;
 11 import  javax.swing.JTable;
 12 import  javax.swing.table.AbstractTableModel;
 13 import  javax.swing.table.TableModel;
 14 /**
 15  *  created by dazuiba
          *
          *  This programe can dispaly a diractory.
          *  when files on this diractory were modified,inserted or deleted. 
          * This programe can immediately changes the displayed files list.
          *
 16  *  @author  come2u@gmail.com
 17  *
 18   */

 19 public   class  Test  {
 20      public   static   void  main(String[] args)  {
 21         String dir  =   " F:\\ " ;
 22         FileMonitor m = new  FileMonitor(dir);
 23         TableModel tbm = new  FileTableModel( new  File(dir));
 24         m.addListener( (FileListener) tbm);
 25         m.start( true );
 26         JTable table  = new  JTable(tbm);  
 27         JScrollPane scrollpane  =   new  JScrollPane(table); 
 28         
 29          int  ww = 500 ;
 30          int  hh = 700 ;
 31         scrollpane.setPreferredSize( new  Dimension(ww, hh));
 32         JFrame jf = new  JFrame(dir);
 33         jf.add(scrollpane);
 34         jf.setSize(ww,hh);
 35          int  w  =  Toolkit.getDefaultToolkit().getScreenSize().width;
 36          int  h  = Toolkit.getDefaultToolkit().getScreenSize().height;
 37         System.out.println(w + " " + h);
 38         jf.setLocation((w - ww) / 2 ,(h - hh) / 2 ); 
 39         jf.setVisible( true );
 40          //  Set to exit on close
 41         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 42         
 43     }

 44 }

 45
 46 interface  FileListener  {
 47      void  dirChanged(FileMonitor monitor);
 48 }

 49
 50 class  FileMonitor  implements  Runnable  {
 51     List < FileListener >  listenerList  =   new  ArrayList < FileListener > ();
 52
 53      private  File dir;
 54
 55      private   long  interval;
 56
 57      private   long  lastScanedTime;
 58
 59      private   int  oldLength;
 60
 61      public   void  addListener(FileListener listener)  {
 62         listenerList.add(listener);
 63     }

 64
 65      public   void  start( boolean  isDamon)  {
 66         Thread t  =   new  Thread( this );
 67         t.setDaemon(isDamon);
 68         t.start();
 69     }

 70
 71      public  FileMonitor(String _dir)  {
 72         File f  =   new  File(_dir);
 73          if  ( ! f.isDirectory())
 74              throw   new  RuntimeException();
 75          this .dir  =  f;
 76          this .interval  =   1000 ; //  1 secend
 77          this .oldLength  =  dir.list().length;
 78     }

 79
 80      public  File[] getMonitoredFile()  {
 81          return   this .dir.listFiles();
 82     }

 83
 84      public   void  run()  {
 85          while  ( true
 86              if  ( ! dir.isDirectory())
 87                  throw   new  RuntimeException();
 88              if  (filesChangeed())  {
 89                 fireFilesChangeedEvent( this );
 90             }

 91              try   {
 92                 Thread.sleep(interval);
 93             }
  catch  (InterruptedException e)  {
 94                 e.printStackTrace();
 95             }

 96         }

 97     }

 98
 99      private   void  fireFilesChangeedEvent(FileMonitor monitor)  {
100          for  ( int  i  =   0 ; i  <  listenerList.size(); i ++ {
101             listenerList.get(i).dirChanged(monitor);
102         }

103     }

104
105      protected   boolean  filesChangeed()  {
106         File[] newFiles  =  dir.listFiles();
107          if  (newFiles.length  !=  oldLength) {
108             oldLength = newFiles.length;
109             System.out.println(newFiles.length);
110              return   true ;
111         }

112          for  ( int  i  =   0 ; i  <  newFiles.length; i ++ {
113              if  (newFiles[i].lastModified()  >=  lastScanedTime)  {
114                  return   true ;
115             }

116         }

117          return   false ;
118     }

119 }

120 class  FileTableModel  extends  AbstractTableModel  implements  FileListener {  
121         private  File[] files = null ;
122
123          public  FileTableModel(File dir) 
124             files = dir.listFiles();
125         }

126
127          public  FileTableModel(File[] ff) 
128              this .files = ff;
129         }

130          public   int  getRowCount()  {
131              return  files.length;
132         }

133
134          //  Get a column's name.
135          public  String getColumnName( int  col)  {
136             String s  =   " 文件名,大小,修改时间 " ;
137              return  s.split( " , " )[col];
138         }
 
139          public   int  getColumnCount()  {
140              return   3 ;
141         }

142
143          public  Object getValueAt( int  rowIndex,  int  columnIndex) 
144             File f  =  files[rowIndex];
145              switch  (columnIndex)  {
146              case   0 :
147                  return  f.getName();
148              case   1 :
149                  return  Util.bytes2kb(f.length());
150              case   2 :
151                  return  Util.toYYYYMMDDHHMMSS(f.lastModified());
152             }

153              return   "" ;
154         }

155
156          public   void  dirChanged(FileMonitor monitor)  {
157              this .files = monitor.getMonitoredFile();
158             fireTableDataChanged();
159         }

160         
161     }

162

 1 package  file;
 2
 3 import  java.math.BigDecimal;
 4 import  java.math.BigInteger;
 5 import  java.text.SimpleDateFormat;
 6 import  java.util.Date;
 7
 8 public   class  Util {
 9      public   static  String toYYYYMMDDHHMMSS( long  time) {
10         SimpleDateFormat format  =   new  SimpleDateFormat( " M月d日H时m分s秒 " );
11          return  format.format( new  Date(time));
12     }

13      public   static   void  main(String[] args)  {
14          long  ss  =   1 ;
15         System.out.println(Util.bytes2kb(ss));
16     }

17      public   static  String bytes2kb( long  bytes)  {
18            BigDecimal filesize  =   new  BigDecimal(bytes);
19            BigDecimal megabyte  =   new  BigDecimal( 1024 * 1024 );
20             float  returnValue  =  filesize.divide(megabyte,  2 , BigDecimal.ROUND_UP).floatValue();
21             if  (returnValue  >   1 )
22                 return (returnValue  +   "  MB " );
23            BigDecimal kilobyte  =   new  BigDecimal( 1024 );
24            returnValue  =  filesize.divide(kilobyte,  2 , BigDecimal.ROUND_UP).floatValue();
25             return (returnValue  +   "  KB " );
26     }

27
28 }