`

java实时监测文件夹的变化,允许多用户同时访问,完成文件转移

阅读更多
来源:http://www.189works.com/article-41159-1.html

//文件监测类

import java.util.Map;
import java.util.HashMap;
import java.io.File;
import java.util.Set;
import java.util.Iterator;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Lock;
public class Monitor{
 private String path=null;//监控路径
 private int ScanTime=0;//扫描时间间隔
 private Map<String,String> FileMap=null;
 private TransferFile transfer;
 private String[] FileNames=new String[100];
 private int count=0;//记录传送文件的数量
 private int[] flag=new int[100];
 private int n=3;//创建线程的最大数量
 public static void main(String args[])
 {
    Monitor monitor=new Monitor("D:\\temp2",1);
    monitor.checkFile();
 }
 public Monitor(String path,int ScanTime)
 {
  this.path=path;
  this.ScanTime=ScanTime;
  this.FileMap=new HashMap<String,String>();
  File file=new File(path);
     ScanFile(file,FileMap);//扫描原有目录下的文件
     ShowFile();//显示文件夹下的文件内容
     
 }
    public void checkFile()
    {
     File file=new File(path);
     ExecutorService exec = Executors.newFixedThreadPool(n);//构建线程池
     while(true)
     {
      try{
      Thread.sleep(1000);
      Map<String,String> nowFileMap=new HashMap<String,String>();
      ScanFile(file,nowFileMap);
      int f=getAddFileMap(nowFileMap);//获得新增加的文件
      if(f==1)
      {
       for(int i=0;i<count;i++)
       {
        
            ThreadMonitor threadMo=new ThreadMonitor(FileNames[i]);
            Thread t1 = new Thread(threadMo); 
            exec.execute(t1); 
         for(int j=i;j<count;j++)//删除处理后文件的名字
         {
          FileNames[j]=FileNames[j+1];
         }
         count--;
       }
      }
      }
      catch(Exception e)
      {
       e.printStackTrace();
      }
     }
     
    }
    public int getAddFileMap(Map<String,String> nowFileMap)
    {
     Iterator<String> iterator=nowFileMap.keySet().iterator();
     while(iterator.hasNext())
     {
      String key=iterator.next();
      if(FileMap.get(key)==null)
      {
       FileNames[count]=key;
       count++;
       FileMap.put(key, nowFileMap.get(key));
       System.out.println("增加:"+nowFileMap.get(key)+count);
      }
       
     }
     if(count!=0)
            {
             return 1;
            }
     return 0;
    }
    public void ShowFile()
    {
     System.out.print(path+"文件目录如下:\n");
     Set<String> set=FileMap.keySet();
     Iterator<String> iterator=set.iterator();//迭代器
     while(iterator.hasNext())
     {
      System.out.println(FileMap.get(iterator.next()));
     }
     System.out.println("==============================");
    }
    //扫描文件夹下的所有内容
    public void ScanFile(File file,Map<String,String> oldFileMap)
    {
       String[] FileList=file.list();
       //System.out.print(FileList[0]+"dsd");
       if(FileList!=null)//文件列表不为空
       {
        for(int i=0;i<FileList.length;i++)
        {
         String name=file.getAbsolutePath()+"\\"+FileList[i];
         File tempFile=new File(name);
         if(tempFile.isDirectory())
         {
            oldFileMap.put(name, "文件夹 \t"+name);
            ScanFile(tempFile,oldFileMap);
         }
         else
         {
          oldFileMap.put(name, "文件 \t"+name);
         }
        }
       }
       else
       {
        //System.out.print("目前文件夹中还没有文件!");
       }
    }
}
class ThreadMonitor implements Runnable{
 private String name=null;
 private TransferFile transfer;
 public ThreadMonitor(String name)
 {
  this.name=name;
 }
 public void run()
 {
  int flag=2;
  while(true)
  {
   try{
   Thread.sleep(1000);
   transfer=new TransferFile();
      flag=transfer.copyFile(this.name,"d:/abc");
      if(flag==0)//代表本文件传输完毕
      {
       break;
      }
   }
   catch(Exception e)
   {
    e.getStackTrace();
   }
  }
  System.out.print(this.name+":"+Thread.currentThread().getName()+"运行完毕");
 }
}

//文件转移类

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class TransferFile {
  private String oldpath=null;
  private String newpath=null;
     //将文件拷贝到指定的文件夹下
     public int copyFile(String oldpath,String newpath) 
     {
       try{
       File oldFile=new File(oldpath);//获取原文件
       File newFile=new File(newpath);
       if(!newFile.exists())//源文件夹不存在,则创建一个
       {
        newFile.mkdir();
       }
       int len=0;
       if(oldFile.exists())//如果文件存在
       {
        FileInputStream inFile=new FileInputStream(oldpath);
        FileOutputStream outFile=new FileOutputStream(newpath+"/"+(oldFile.getName()).toString());
        byte[] buffer=new byte[1024*10];
        while((len=inFile.read(buffer))!=-1)
        {
         outFile.write(buffer, 0, len);
        }
        outFile.flush();
        outFile.close();
        inFile.close();
        oldFile.delete();//删除备份后的原文件
       }
     }catch(Exception e){
      return -1;
     }
     return 0;
     }
}

分享到:
评论

相关推荐

    src.rar_java监控文件夹_文件监控_监控文件

    总结来说,这个项目通过ZJPFileListener和ZJPFileMonitor两个类,实现了基于Java的文件监控功能,能够实时监测文件夹中文件的状态变化,并按照设定的时间间隔进行检查。这对于需要实时跟踪文件系统变化的系统来说...

    基于Java环境的实时环境监测系统设计源码

    该系统的主要目标是实现环境数据的实时记录与管理,其应用场景广泛,包括但不限于大气监测、水质检测、土壤污染分析等多个环境监测领域。 系统的设计采用了当前流行的Java编程语言进行开发。Java以其跨平台、面向...

    股市监测 Java Swing 项目源代码

    5. **jnlp** - 可能包含Java Web Start(JNLP)文件,这是一种部署Java应用程序的方式,允许用户通过Web浏览器下载并运行应用。JNLP文件描述了应用的结构、所需资源以及如何启动应用。 6. **lib** - 库文件夹,存放...

    基于Java语言开发的水质监测服务端设计源码

    本项目是一款基于Java语言开发的水质监测服务端设计源码,它利用Java的强大功能和良好的跨平台性能,为水质监测数据的实时收集、存储、分析和管理提供了完整的软件解决方案。 Java语言因其独特的跨平台特性、高效的...

    基于Java语言的物联网环境监测数据中心设计源码

    项目的源码包含了多个Java源文件,这些文件是整个数据中心运行的核心,它们定义了系统的逻辑结构、功能实现以及与外部设备的通信接口。 项目的文件结构清晰,使用了Maven进行项目管理,这一点从项目中包含的pom.xml...

    基于Java的简单心理健康监测系统设计与实现源码

    在当前的信息时代,人们的生活节奏加快,面临的压力也日益增大,心理健康问题逐渐...随着技术的不断进步和用户需求的进一步发展,心理健康监测系统有望不断完善和升级,为更多用户提供更全面、更专业的心理健康服务。

    基于Java的水质检测系统(含数据库文件).zip

    对于初学者而言,通过阅读和理解这个项目的源代码,可以深入了解Java编程、数据库操作、GUI设计等多个方面的知识。同时,这个系统也可作为实际项目经验的积累,帮助提升问题解决和项目管理能力。在实际使用中,根据...

    基于Java语言的资源监测平台后端设计源码

    本项目是一个完整的基于Java语言的资源监测平台后端设计源码,旨在为用户提供一个高效的资源监控解决方案。整个项目由77个文件组成,其中包含了核心的Java源文件,用于实现平台的逻辑处理;XML配置文件和YAML配置...

    基于Java和Vue的水资源监测数据可视化系统SSM架构设计源码

    在数据可视化方面,系统集成了多种图表库和数据展示技术,使得数据能够以图表的形式展现,包括但不限于柱状图、折线图、饼图等,这些图表能够让用户更加直观地了解水资源监测的数据变化。为了实现这些功能,系统后端...

    java毕业设计之远程监测系统源码.zip

    至于"yuanma",根据上下文推测可能是源码的简写,可能指的是项目的源代码文件夹,其中包含了项目的各个模块,如业务逻辑、数据访问层、控制层等,以及相关的配置文件和资源文件。 综上所述,这个Java毕业设计项目...

    java+jquery文件上传 无刷新 带进度条,监控文件上传情况

    `java+jquery`的文件上传技术结合了后端的Java服务器处理和前端的jQuery库来实现无刷新的用户体验,同时提供上传进度条,实时反馈文件上传状态。本文将详细讲解这个主题。 首先,让我们了解Java文件上传的基础。在...

    打字测试软件(JAVA)

    1. **输入检测**:软件需要实时监测用户的键盘输入,与预设的文本进行比较,判断是否正确,并记录错误次数。 2. **计时器**:为测试设置时间限制,模拟实际的打字速度测试环境,增加挑战性。 3. **成绩计算**:根据...

    基于Java语言的空气检测质量系统设计源码

    例如,系统可能需要将多个传感器数据汇总到一个中心数据库中,然后利用Java编写的数据处理逻辑对数据进行分析,以便用户能够实时查看空气质量情况。 功能模块开发是项目的另一个关键部分。在这个项目中,至少需要...

    windows文件夹简介

    - **描述**:SystemProfile文件夹包含了系统默认的用户配置文件信息,用于初始化新用户的环境设置。 - **可否删除**:不建议删除。如果删除,可能会影响新用户账户的创建和设置。 #### 4. **Drivers** - **描述**:...

    java实现gif动画效果(java显示动态图片)

    总结,Java实现GIF动画效果需要结合窗口组件、图像处理、定时器以及可能的用户交互等多方面知识。通过不断刷新并切换图片帧,可以模拟出动态的视觉效果。在实际项目中,还可以考虑优化性能,比如预加载图片、使用...

    基于Java语言的森林病害系统设计源码展示

    同时,系统的前端可能还会涉及到图形用户界面(GUI)的开发,以便用户能更加直观地使用系统,进行森林病害的监测和管理。 本项目的源码展示不仅仅是对Java编程技术的应用,更是一个综合性的信息系统解决方案。它融合...

    北京雨量监测系统.rar

    - "RainManage":这个文件名可能表示一个管理模块,可能是Java源代码文件夹,包含了处理雨量数据管理的类,如数据的增删改查操作,或者与用户交互的控制器。也可能是一个具体的Java类,负责处理雨量数据的业务逻辑。...

    GIS-system.zip_gis java_gis程序设计_实时跟踪系统_轨迹

    "基于GIS的移动对象实时跟踪系统的执行文件"应该是编译后的Java应用程序,可以直接运行来演示系统功能。而"基于GIS的移动对象实时跟踪系统的程序代码"则包含了源代码,可供学习和参考。 在实际应用中,这样的系统...

    悬浮框监视内存变化

    因此,实时监测内存变化可以帮助开发者找出可能导致问题的部分。 “内存”标签强调了这个Demo的重点是内存管理。在Android中,内存管理涉及了解对象生命周期,避免内存泄漏,以及有效地使用Java堆和Dalvik/ART...

    基于Java和HTML的多媒体教室智能交互设计源码

    源码中包含的66个Java源代码文件构成了系统的核心逻辑,它们负责处理数据运算、事件响应以及与用户的交互等功能。而33个XML配置文件则用于定义系统的配置信息,包括用户界面布局、国际化支持、网络通信参数等,这些...

Global site tag (gtag.js) - Google Analytics