2014-02-16 36 views
0

我知道如何一次將所有文件從一個目錄發送到另一個目錄。 但我怎麼能發送文件(.txt)從一個目錄到另一個60秒延遲一個。如何使用java一個接一個地移動文件

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); 
    } 
} 

謝謝

+1

我不明白。您知道如何移動單個文件,並且您知道如何安排任務。爲什麼不把兩者結合? – xp500

+0

如果你想延遲六十秒,爲什麼你指定延遲一秒? – EJP

+0

但是它一次移動所有文件,當你調用renameTo時,我想逐個移動文件 – user3315355

回答

0
  1. 裏面你的TimerTask,使用File#listFiles()(可能與FilenameFilter參數,如果適合您的需要),以獲得在源目錄中的文件列表。
  2. 遍歷返回的文件尋找第一個不是目錄的項目(假設您只想移動普通文件)。
  3. 移動該文件。
  4. 可選(取決於您的要求)如果您到達返回文件數組的末尾並且未找到任何非目錄,請停止TimerTask。
0
  1. 開始Timer每60秒觸發一次。
  2. Timer的構造函數中,使用DirectoryStream<Path>獲取目錄中的所有文件。這是使用nio包中的Files類的靜態方法完成的。
  3. 然後,使用Timer中的Files.move()逐個移動文件。
  4. 當您遍歷了流中的所有文件時,請停止Timer

DirectoryStream可以是globbed,因此可以過濾所需的文件。您可以編寫簡單的擴展或複雜的RegEx來決定在您的DirectoryStream中返回哪些文件。

相關問題