2012-06-15 7 views
0

출력이 .txt 파일에 기록되는 Java 프로그램을 작성하고 있습니다. 프로그램을 실행할 때마다 파일을 덮어 씁니다. 추가 스위치를 사용하여 파일에 데이터를 추가하고 싶지 않습니다.덮어 쓰거나 추가하지 않고 파일에 쓰기

프로그램을 실행할 때마다 동일한 이름의 새 파일이 만들어 지도록하고 싶습니다. 예를 들어 overflow.txt이 파일 이름이고 프로그램을 세 번 실행하면 overflow(1).txt, overflow(2).txtoverflow(3).txt 파일을 만들어야합니다.

어떻게 달성 할 수 있습니까?

+3

overflow (1) .txt는 overflow (2) .txt와 같은 파일이 아닙니다. 그들에는 다른 이름이있다. – NominSim

답변

2

"같은 이름의 새 파일"은 대부분의 파일 시스템에서 의미가 없습니다. 당신의 예에서

, 당신은 다른 이름으로 세 개의 파일을 가지고 :

  • 오버 플로우 (1) .txt로
  • 오버 플로우 (2) .txt로
  • 오버 플로우 (3)가 .txt를

괄호 안의 비트는 여전히 이름의 일부입니다.

  • 시작에서 계산 (당신이 존재하지 않는 경우 그에 기록 할 경우)

    • 는 "일반"파일 이름의 존재를 감지 : 당신이 그 행동을 모방하려는 경우, 당신은해야합니다 1, 그리고 운동 당신이
  • +0

    그는 다음 번에 앱을 실행할 때 overflow.txt가 처음 생성 된 후 오버플로 (2) .txt로 이름이 바뀐 롤오버를 원하고 있다고 생각합니다. log4j 파일 롤링 시스템처럼 들립니다. –

    +0

    @ 존 : 질문에서 정말 분명하지 않습니다 ... –

    +0

    동의 .......... –

    3

    확인 존재하지 않는 파일 이름을 찾을 때까지 계산을 계속 다시

  • 확장을 가하고, 괄호 안에 수를 추가 확장을 제거 할 때마다 "새로운"파일 이름 파일이있는 경우 이름을 바꿉니다. File.existsFileUtils.moveFile

    충돌이 없을 때까지이 작업을 반복해야합니다.

  • 0

    File 객체를 인스턴스화 할 때 File 객체가 있는지 확인하고, 존재하는 경우 중괄호와 숫자를 추가하여 이름을 바꾸고 다시 확인하십시오.

    +0

    이름 바꾸기가 충돌하지 않도록 재귀 적 메서드가 필요합니다. –

    +0

    네, 그게 내가 다시 xD를 확인했다. –

    3

    파일이 먼저 존재하는지 확인하십시오. 그렇다면 이름을 수정하십시오.

    String origName = "overflow"; 
    String ext = ".txt"; 
    int num = 1; 
    file = new File(origName + ext); 
    while (file.exists()) { 
    num++; 
    file = new File(myOrigFileName +"(" + num + ")" + ext); 
    } 
    

    실제 요구 사항에 따라 수정하십시오. 질문이 명확하지 않습니다.

    1
    String dirPath = "./"; 
    String fileName = dirPath + "overflow.txt"; 
    if(new File(dirPath + fileName).exist()) 
    { 
        int counter = 0; 
        while(new File(dirPath + "overflow(" + ++counter + ").txt").exist()); 
        fileName = "overflow(" + counter + ").txt"; 
    } 
    
    관련 문제