2013-01-20 6 views
4

자바에서 TempFile의 최대 이름 길이는 무엇이며 MaximumFilesize은 에 따라 달라질 수 있습니다. 임시 디렉토리를 만들거나 기타 다른 자바 기반 시스템을 언급할까요?자바 만들기 임시 파일

deleteOnExit() 메서드를 호출 할 때 --- JVM이 종료 될 때 호출되기 때문에이 메서드를 사용합니다.하지만 프로덕션 기반 서버에서는 24 * 7. 실행되므로 파일이 계속 만들어지고 메모리 때문에 파일을 만드는 서버에서 문제가 될 수 있습니다.

답변

3

Java에서 TempFile의 최대 이름 길이는 얼마이고 만들 수있는 임시 디렉토리 또는 다른 Java 기반을 언급하는 컴퓨터에서 MaximumFilesize가 depenting됩니까?

1775   static File generateFile(String prefix, String suffix, File dir) { 
1776    long n = random.nextLong(); 
1777    if (n == Long.MIN_VALUE) { 
1778     n = 0;  // corner case 
1779    } else { 
1780     n = Math.abs(n); 
1781    } 
1782    return new File(dir, prefix + Long.toString(n) + suffix); 
1783   } 

때문에 파일 이름은 접두사 접미사 어떤 임의 long

deleteOnExit() 메서드를 호출 ---하지만이 호출되는 때문에이 방법의 사용 무엇을 할

JVM이 실행됩니다 생산 기반 서버로 나누고, 오는 24 * 7

는 일부 파일 그게 전부는

,이 응용 프로그램 수명 생성 할 필요가있다 예를를 들어

당신이 당신의 일식로부터 Long.MAX_VALUE 이에 한정되는 자바

+0

하지만 내 응용 프로그램 용으로 만들어야 할 파일이 필요하지만 JVM을 사용하지 않을 때 시간이 지나면 파일을 삭제하고 싶습니다. – sunleo

+0

다음 간단히'delete()'메서드를 사용하십시오 –

+0

파일 크기에 대해 도움을 주셔서 감사합니다.? – sunleo

1

최대 파일 크기가 존재하는 경우는 삭제 얻을 것이다 작업 공간을 고정하기 위해 만든 .lock 파일을 볼 일식 시작 ... .이, 그리고 파일 이름의 길이는 자동 청소 임시-파일에 EXT4 (리눅스) 또는 NTFS (윈도우)

+0

도와 주셔서 감사합니다. – sunleo

7

처럼 .... 기본 파일 시스템에 의해 제한되는 나이 (수정) XX 초 ...

import java.io.File; 
import java.io.IOException; 
import java.util.HashSet; 

public class FileAutoCleaner { 
    final static FileAutoCleaner singleton = new FileAutoCleaner(); 
    final HashSet<File> bag = new HashSet<File>(); 

    public static FileAutoCleaner getInstance() { 
     return singleton; 
    } 

    // This create the temp file and add to bag for checking 
    public synchronized File createTempFile(String prefix, String suffix) throws IOException { 
     File tmp = File.createTempFile(prefix, suffix); 
     tmp.deleteOnExit(); 
     bag.add(tmp); 
     return tmp; 
    } 

    // Periodically call this function to clean old files 
    public synchronized void cleanOldFiles(final int secondsOld) { 
     long now = (System.currentTimeMillis()/1000); 
     for (File f : bag) { 
      long expired = (f.lastModified()/1000) + secondsOld; 
      if (now >= expired) { 
       System.out.println("Deleted file=" + f.getAbsolutePath()); 
       f.delete(); 
       bag.remove(f); 
      } 
     } 
    } 

    public static void main(String[] args) throws Exception { 
     FileAutoCleaner fac = FileAutoCleaner.getInstance(); 
     System.out.println(System.currentTimeMillis()/1000); 
     fac.createTempFile("deleteme", "tmp"); 
     for (int i = 0; i < 5; i++) { 
      System.out.println(System.currentTimeMillis()/1000); 
      // delete if older than 2 seconds 
      fac.cleanOldFiles(2); 
      Thread.sleep(1000); 
     } 
    } 

} 
이상
+0

도움 주셔서 감사합니다. – sunleo

0

문자열 tmpDir = System.getProperty ("java.io.tmpdir");
파일 file = 새 파일 (tmpDir + "\"+ fileName + ". tmp");