如何使用java逐个移动文件

时间:2014-02-16 06:54:07

标签: java scheduler

我知道如何一次将所有文件从一个目录发送到另一个目录。 但是我怎么能想要将文件(.txt)从一个目录一个接一个地发送到另一个目录,延迟时间为60秒。

import java.io.File;

public class MoveFilesJavaExample {

    public static void main(String[] args) {
        try {

            File oldFile = new File("C:\\source\\File.txt");

            if (oldFile.renameTo(new File("C:\\destination"+ oldFile.getName()))) {
                System.out.println("The file was moved successfully to the new folder");
            } else {
                System.out.println("The File was not moved.");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我可以使用以下代码,但它每5秒只执行相同的工作。

import java.util.Timer;
import java.util.TimerTask;

public class UtilTimerDemo {
  public static void main(String[] argv) throws Exception {
    int delay = 5000; // delay for 5 sec.
    int period = 1000; // repeat every sec.
    Timer timer = new Timer();

    timer.scheduleAtFixedRate(new TimerTask() {
      public void run() {
        System.out.println("doing"); 
      }
    }, delay, period);
  }
}

谢谢

2 个答案:

答案 0 :(得分:0)

  1. 在TimerTask内部,使用File#listFiles()(可能带有FilenameFilter参数,如果符合您的需要),以获取源目录中的文件列表。
  2. 遍历返回的文件,查找不是目录的第一个项目(假设您只想移动普通文件)。
  3. 移动该文件。
  4. (可选)(根据您的要求)如果到达返回文件数组的末尾并且未找到任何非目录,则停止TimerTask。

答案 1 :(得分:0)

  1. 开始每隔60秒发射一次Timer
  2. Timer的构造函数中,使用DirectoryStream<Path>获取目录中的所有文件。这是使用Files包中的nio类的静态方法完成的。
  3. 然后,使用Timer中的Files.move()逐个移动文件。
  4. 当您遍历流中的所有文件时停止Timer
  5. DirectoryStream可以全局化,从而允许您过滤所需的文件。您可以编写简单的扩展名或复杂的RegEx来决定DirectoryStream中返回的文件。