總網頁瀏覽量

2015年10月21日 星期三

[Java] 移動檔案

日常生活中的小小實做,
依照日期把檔案分類到專屬的資料夾中.

程式很簡單但是卻寫了一整天 = = ,
分三部分, 第一部分 main 就是定資料夾, 在用第二部分的 print 印出來,
印的同時利用第三部分 settime 把每個檔案的建立時間顯示出來, 以方便做比較,
在比較建造日期後, 比對成功就呼叫第四部分, 把檔案移至對應的資料夾中.

可以在改進的地方應該是,
1. 把輸入目前路徑, 目標路徑, 單獨列出讓使用者好修改
2. 日期借面 A日到B日的檔案坐轉移
3. 函式寫得很醜, 可以在改進囉~


import java.io.*;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class File_mvoe_2{
    public static void main(String args[])throws IOException{
        String path = "M:\\FTP";   
        File f = new File(path);
        print(f,1,path);
    }
   
    private static void print(File f, int level,String path){
        String pl = "";
        for(int i = 0 ; i < level ; i++){
            pl +="\t";
        }
       
        File[] child = f.listFiles();
        for(int i = 0; i < child.length ; i++){
            String s = child[i].getName();
           
            settime(path,s);
            if(child[i].isDirectory()){
                path = path +"\\"+ child[i].getName();
                print(child[i], level+1, path);
            }
        }
    }
   
    private static void settime(String inputpath, String name){
       
        try{
            File file = new File(inputpath+"\\"+name);
           
            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(file.lastModified());
           
            Path path = Paths.get(inputpath+"\\"+name);
            BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
           
            c.setTimeInMillis(attrs.creationTime().toMillis());
            String da = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
            //System.out.println("DA: "+da);
           
            int i = 0;
            if(da.equals("2015-10-21") ){
                move(inputpath, name, i);
            }

        }catch(IOException e){
            e.printStackTrace();
        }
    }
   
    private static void move(String inputpath, String name, int i ){
        File source = null;
        File destFile = null;
        File directory = null;
        boolean rt = false;
       
        try{
            source = new File(inputpath+"\\"+name);
            String Target = "M:\\ftp TMP\\08.21";   
            directory = new File(Target);
            if(!directory.isDirectory()){
                directory.mkdirs();
            }
            destFile = new File(Target+"\\"+name);
            rt = source.renameTo(destFile);
            //System.out.println("rt: "+rt+" : "+name);
        }catch(Exception e){
           
        }
       
    }
   
}



參考資料:
顯示基本資料
http://bioankeyang.blogspot.tw/2015/01/java.html
顯示資料夾資料
http://ced425.pixnet.net/blog/post/3368206-java.io.file%E9%A1%9E%E7%B7%B4%E7%BF%92
移動資料
http://blog.csdn.net/lfdfhl/article/details/8302605


這是比較簡單的檔案移動程式

 import java.io.*;

public class File_mvoe{
    public static void main(String args[]){
        File source = null;      //  想要移動的檔案
        File directory = null;   // 想要移動到的目的地資料夾
        File destFile = null;    //  移動過去的資料夾路徑+檔案名稱(可以自取)
        boolean rt = false;
      
        try{
            source = new File("M:\\A\\DCS-9202009010502073601.jpg");
            directory = new File("M:\\B");
            destFile = new File("M:\\B\\DCS-9202009010502073601.jpg");
            //判斷目標資料夾是否存在, 不存在就建立新的
            if (directory.isDirectory()) {
             System.out.println("Directory is exist.");
            }else{
                directory.mkdirs();
                System.out.println("Directory is not exist, so creat .");
            }
          
           // 要移動的檔案是不是存在
            if(source.exists()){
                System.out.println("File is exists");
            }else{
                System.out.println("File is not exists");
            }
          
            // 用rename 方法移動檔案, 會回傳booblean 回去, 才知道是不是有移動成功
            rt = source.renameTo(destFile);
            System.out.println("File renamed: "+ rt); 
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}   

沒有留言:

張貼留言