我想通过FTP传送.txt文件到Liunx系统下,因为在传送过程中,Liunx系统下的这个.txt文件的大小会逐渐增加,即每次刷新大小都会增加,我想通过Timer编一个程序,来实现实时监控着文件的大小的变化,如果文件传送完毕,即文件大小不会再变化,此时这个线程自动取消退出。如果没有传送完毕,线程一直监听着。现在遇到的问题是,因为定时每隔一段时间执行一次。也能监测到文件的变化,但是传完之后,还是一直处与死循环状态。我想等文件传完之后,就取消此线程。然后返回文件传送完毕。这个问题我都想一周了。头都大了。希望高手能够帮帮忙。谢谢大家!!!

解决方案 »

  1.   

    我刚解决了一个和你一模一样的问题,很简单
    用TimeTask类
    class MyTimerTask extends TimerTask {
    public MyTimerTask() {
    }; public void run() {
    try {
    // 80,000,000 bytes=80M
    if (fileContent.length() >= 80000000L) {// 文件大于80M就新开一个文件
    fconNum++;
    fileContent = new File("E://test//content" + fconNum
    + ".txt");
    fwcontent = new FileWriter(fileContent); }
    System.gc(); } catch (IOException e) {
    System.err.println(e);
    }
    }
    }
    在你的主程序中添加Timer timer = new Timer();
    timer.schedule(new MyTimerTask(), 50, 200);
    来启动这个后台线程。
    在你希望这个线程结束的地方添加timer.cancel();
    一定可以的。
      

  2.   

    像上面说的,你可以在想取消的地方调用timer.cancel()还有一个方法就是,你在TimerTask类使用一个字段.
    用来保存上次访问文件的大小,
    如果第二次查看的文件大小和
    上次查看到的文件大小一样的话,就表示文件传送完了.