Java创建临时文件

时间:2013-01-20 00:24:13

标签: java

java中TempFile的最大名称长度是多少,而MaximumFilesize取决于deleteOnExit()  在我们提到要创建的临时目录或其他一些基于java的机器上?

何时调用{{1}}方法---但是这个方法的用途是什么,因为它在JVM关闭时被调用。但是基于生产的服务器将运行24 * 7.So文件将被创建由于内存的原因,我们创建文件的服务器会一直存在问题。

4 个答案:

答案 0 :(得分:7)

自动清除比X秒更早(修改)的临时文件......

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

}

答案 1 :(得分:3)

  

java中的TempFile的最大名称长度是什么,而MaximumFilesize在我们提到要创建的临时目录或其他一些基于java的机器上依赖?

 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

需要为应用程序生命创建一些文件,

例如当您启动eclipse时,您将看到.lock文件被创建以锁定当您的eclipse存在时它将被删除的工作空间

答案 2 :(得分:1)

java中的最大文件大小限制为Long.MAX_VALUE但是....这个和文件名长度受底层文件系统的限制....如EXT4(Linux)或NTFS(视窗)

答案 3 :(得分:0)

String tmpDir = System.getProperty(&#34; java.io.tmpdir&#34;);
文件文件=新文件(tmpDir +&#34; \&#34; + fileName +&#34; .tmp&#34;);