2014-05-19 2 views
2
public static void main(String[] args) { 

    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
    Date date = new Date(); 

소스 폴더다른 폴더로 이동하면서 폴더에 여러 파일의 날짜와 시간을 추가하는 방법

 File source = new File("D:\\A1\\"); 
    File dest = new File("D:\\A2\\"); 
    File[] files = source.listFiles(); 


    for (File file: source.listFiles()){ 
       String x=(source+"\\"+file.getName()); 
     String y=(dest + "\\"+ file.getName()); 

    File f1 = new File(x); 
    f1.renameTo(new File(y));  

    } 
파일을 이동할 때이 코드는 대상 폴더에 소스 파일을 이동하지만, 내가 원하는

대상 폴더로. 이

+0

동시에 두 가지 일을하려는 것처럼 들립니다. 간단하게 유지하십시오 (KISS), 한 번에 한 가지만하십시오. 원본 폴더에서 이름을 바꿀 수 없으면 먼저 임시 디렉터리에 복사하고 이름을 변경 한 다음 결과를 출력으로 복사하십시오. 문제가 있음을 증명할 때까지 성능에 대해 너무 걱정하지 않아야합니다. –

+0

당신은 바로이 문장에 형식화 된 시스템 날짜를 삽입하면됩니다.'String y = (dest + "\ file.getName());' – Sanjeev

+0

@Sanjeev @ yan (dest + \ "+ file.getName() +" "+ date)); 하지만 내가 그것을 할 때 dest 폴더에 복사하지 말아주세요 – Anandv

답변

1

하는 데 도움이됩니다.

운영 체제에서 파일 이름에 일부 문자가 표시되지 않을 수 있습니다 (예 : 콜론 및 슬래시가 창에 사용되지 않을 수 있음). 따라서 대체 문자를 찾아야합니다.

또한 파일이 실제로 이동되었는지 여부를 확인하려면 renameTo의 반환 값을 확인해야합니다.

은 이름 변경이 성공한 경우에만 true를 반환합니다. 이 같은 그렇지 않은 경우는 false

당신은 시도 할 수있는 일 : 자체에서 알 수 renameTo의 자바 독으로 Files#move을 사용하여 더 나은 파일을 이동하는 마지막

public static void main(String[] args) { 

    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
    Date date = new Date(); 
    String ts = dateFormat.format(date); 

    File source = new File("D:\\A1\\"); 
    File dest = new File("D:\\A2\\"); 

    for (File file : source.listFiles()) { 
     String x = (source + "\\" + file.getName()); 
     String y = (dest + "\\" + addTimestamp(file.getName(), ts)); 

     File f1 = new File(x); 
     if(f1.renameTo(new File(y))){ 
      System.out.println("moved: " + y); 
     } else { 
      System.out.println("unable to move: " + y); 
     } 
    } 
} 

private static String addTimestamp(String name, String ts) { 
    int lastIndexOf = name.lastIndexOf('.'); 
    return (lastIndexOf == -1 ? 
      name + "_" + ts 
      : 
      name.substring(0, lastIndexOf) + "_" + ts + 
      name.substring(lastIndexOf)) 
      .replaceAll("[\\/:\\*\\?\"<>| ]", "_"); 
} 

.

1

당신은 파일 #의 renameTo 방법의 자바 문서 당으로 이런 식

DateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); 
Date date = new Date(); 
y=(dest + "\\"+ file.getName()+dateFormat.format(date)); 
+0

날짜와 시간으로 인쇄하지만 대상 폴더에 복사되지 않습니다. – Anandv

+0

'renameTo' 대신'move' 메소드를 사용해보십시오. – Smitt

0

을 수행 할 수 있습니다 제발 도와주세요 이름과 시스템 날짜를 추가, 그것은 플랫폼에 의존 구현과 작동하지 않을 수 있습니다 당신이 기대하는대로. 이름 바꾸기 작업이 원자되지 않을 수도 있습니다, 또 다른 하나 개의 파일 시스템에서 파일을 이동하지 못할 수 있습니다, 그것은 이되지 않을 수 있습니다이 방법의 동작의

많은 측면은 본질적으로 플랫폼에 의존 대상 추상 경로 이름이 인 파일이 이미 존재하면 성공합니다. 이름 바꾸기 작업이 성공적으로 수행되었는지 확인하려면 반환 값을 항상 확인해야합니다.

Files 클래스는 플랫폼에 관계없이 파일을 이동하거나 이름을 바꿀 move 메서드를 정의합니다.

Files#move 방법을 사용할 수도 있습니다. 이는 플랫폼 독립적 인 방법입니다.

희망이 당신은 확장하기 전에 가장 오른쪽에있는 파일 이름에 타임 스탬프를 추가 할 필요가

관련 문제