001 /* 002 * LAPIS lightweight structured text processing system 003 * 004 * Copyright (C) 1998-2002 Carnegie Mellon University, 005 * Copyright (C) 2003 Massachusetts Institute of Technology. 006 * All rights reserved. 007 * 008 * This library is free software; you can redistribute it 009 * and/or modify it under the terms of the GNU General 010 * Public License as published by the Free Software 011 * Foundation, version 2. 012 * 013 * LAPIS homepage: http://graphics.lcs.mit.edu/lapis/ 014 */ 015 016 package lapisx.io; 017 018 //import java.net.*; 019 import java.io.*; 020 import java.util.Vector; 021 022 public abstract class TempFile { 023 private static String tempDir; 024 private static Vector temps = new Vector (); 025 026 static { 027 if (!(tryTempDir (getTempDirProperty ()) 028 || tryTempDir ("c:\\temp") // Windows 029 || tryTempDir ("c:\\windows\\temp") // also Windows 030 || tryTempDir ("/tmp") // Unix 031 )) 032 useTempDir (""); // default to current directory 033 } 034 035 private static String getTempDirProperty () { 036 try { 037 return System.getProperty ("temp.directory"); 038 } catch (SecurityException e) { 039 return null; 040 } 041 } 042 043 private static boolean tryTempDir (String dir) { 044 if (dir == null) 045 return false; 046 047 File f = new File (dir); 048 if (!f.exists ()) { 049 //System.err.println (dir + " does not exist"); 050 return false; 051 } 052 053 if (!f.isDirectory ()) { 054 //System.err.println (dir + " not a directory"); 055 return false; 056 } 057 058 059 if (dir.length () > 0 060 && !(dir.endsWith ("/") || 061 dir.endsWith (File.separator))) 062 dir += File.separator; 063 useTempDir (dir); 064 return true; 065 } 066 067 private static void useTempDir (String dir) { 068 tempDir = dir; 069 } 070 071 public static String getTempDirectory () { 072 return tempDir; 073 } 074 075 public static File makeTempFile (String basename, String extension) { 076 String dir = getTempDirectory (); 077 File f; 078 synchronized (temps) { 079 do 080 f = new File (dir 081 + basename 082 + String.valueOf ((int)(Math.random() * 999999)) 083 + extension); 084 while (temps.contains (f) || f.exists()); 085 registerTempFile (f); 086 } 087 return f; 088 } 089 090 public static void registerTempFile (File f) { 091 temps.addElement (f); 092 } 093 094 public static void deleteAllTempFiles () { 095 synchronized (temps) { 096 for (int i=0; i<temps.size(); ++i) { 097 File f = (File)temps.elementAt(i); 098 f.delete (); 099 } 100 temps.setSize (0); 101 } 102 } 103 }