欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java 监听文件或文件夹变化,java文件夹

来源: javaer 分享于  点击 40550 次 点评:163

java 监听文件或文件夹变化,java文件夹


    今天遇到一个新需求,当从服务器下载文件后用指定的本地程序打开,不知道何时文件下载完成,只能考虑监听文件夹,当有新文件创建的时候打开指定程序。

在此给出一个完整的下载和打开过程:

1、下载文件

jsp页面

1 <body>
2     <div>
3         <a href="<%=basePath%>/user/downLoadFile?fileName=proPlan.DWG" >点击下载</a>
4     </div>
5 </body>

java代码

 1  public static void downLoadtFile(HttpServletResponse response, File file) throws IOException
 2     {
 3         response.reset();
 4         response.setContentType("application/vnd.ms-excel;charset=UTF-8");
 5         response.setHeader("Content-disposition",
 6                 "attachment; filename=" + new String(file.getName().getBytes(), "iso-8859-1"));
 7         OutputStream outputStream = response.getOutputStream();
 8         InputStream in = new FileInputStream(file);
 9         byte[] b = new byte[1024];
10         int len = 0;
11         while ((len = in.read(b)) > 0)
12         {
13             outputStream.write(b, 0, len);
14         }
15         outputStream.write(b);
16         outputStream.flush();
17         in.close();
18     }

2、监听文件夹,执行打开程序

1 package demo; 2 3 import java.io.IOException; 4 import java.nio.file.FileSystems; 5 import java.nio.file.Path; 6 import java.nio.file.Paths; 7 import java.nio.file.StandardWatchEventKinds; 8 import java.nio.file.WatchEvent; 9 import java.nio.file.WatchKey; 10 import java.nio.file.WatchService; 11 import java.util.List; 12 import java.util.concurrent.ExecutorService; 13 import java.util.concurrent.Executors; 14 15 public class FolderListener { 16 private static ExecutorService fixedThreadPool = Executors.newCachedThreadPool(); 17 private WatchService ws; 18 private String listenerPath; 19 private FolderListener(String path) { 20 try { 21 ws = FileSystems.getDefault().newWatchService(); 22 this.listenerPath = path; 23 start(); 24 } catch (IOException e) { 25 e.printStackTrace(); 26 } 27 } 28 29 private void start() { 30 fixedThreadPool.execute(new Listner(ws,this.listenerPath)); 31 } 32 33 public static void addListener(String path) throws IOException { 34 FolderListener resourceListener = new FolderListener(path); 35 Path p = Paths.get(path); 36 //注册监听事件,文件的修改、删除和创建 37 p.register(resourceListener.ws, 38 StandardWatchEventKinds.ENTRY_MODIFY, 39 StandardWatchEventKinds.ENTRY_DELETE, 40 StandardWatchEventKinds.ENTRY_CREATE); 41 } 42 43 44 public static void main(String[] args) throws IOException { 45 //监听下载目录的变化 46 FolderListener.addListener("C:\\Users\\Administrator\\Downloads\\"); 47 } 48 } 49 50 class Listner implements Runnable { 51 private WatchService service; 52 private String rootPath; 53 54 public Listner(WatchService service,String rootPath) { 55 this.service = service; 56 this.rootPath = rootPath; 57 } 58 59 public void run() { 60 try { 61 while(true){ 62 WatchKey watchKey = service.take(); 63 List<WatchEvent<?>> watchEvents = watchKey.pollEvents(); 64 for(WatchEvent<?> event : watchEvents){ 65 if(event.context().toString().endsWith(".DWG")) 66 // 根据事件类型采取不同的操作。。。。。。。 67 try { 68 System.out.println("["+rootPath+event.context()+"]文件发生了["+event.kind()+"]事件"+ event.count()); 69 String[] cmd = { "D:\\cad\\AutoCAD\\acad.exe", "C:\\Users\\Administrator\\Downloads\\" + event.context().toString() }; 70 Runtime.getRuntime().exec(cmd); 71 } catch (IOException e) { 72 e.printStackTrace(); 73 } 74 } 75 watchKey.reset(); 76 } 77 } catch (InterruptedException e) { 78 e.printStackTrace(); 79 }finally{ 80 System.out.println("fdsfsdf"); 81 try { 82 service.close(); 83 } catch (IOException e) { 84 e.printStackTrace(); 85 } 86 } 87 88 } 89 } View Code

 

补充,除了执行指定exe,打开软件外还可以执行命令行

 1 package demo;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.InputStream;
 5 import java.io.InputStreamReader;  
 6   
 7 public class Command {  
 8     
 9     public static void main(String[] args) {
10         String s = exeCmd("ipconfig");
11         System.out.println(s);
12     }
13     
14     public static String exeCmd(String commandStr) {  
15         BufferedReader br = null;  
16         StringBuilder sb = new StringBuilder(); 
17         try {  
18             Process p = Runtime.getRuntime().exec(commandStr);  
19             br = new BufferedReader(new InputStreamReader(p.getInputStream(), "gb2312"));
20 //            InputStream in = p.getInputStream();
21 //            byte[] b = new byte[1024];
22 //            int len = 0;
23 //            while((len = in.read(b)) > 0){
24 //                sb.append(new String(b,"gb2312")).append("\n");
25 //            }
26             String line = null;  
27             while ((line = br.readLine()) != null) {  
28                 sb.append(line).append("\n");  
29             }  
30         } catch (Exception e) {  
31             e.printStackTrace();  
32         }   
33         finally  
34         {  
35             if (br != null)  
36             {  
37                 try {  
38                     br.close();  
39                 } catch (Exception e) {  
40                     e.printStackTrace();  
41                 }  
42             }  
43         }  
44         return sb.toString();
45     }  
46 }  

 

相关文章

    暂无相关文章
相关栏目:

用户点评