28 |
28 |
29 import java.io.File; |
29 import java.io.File; |
30 import java.io.FileNotFoundException; |
30 import java.io.FileNotFoundException; |
31 import java.io.IOException; |
31 import java.io.IOException; |
32 import java.io.RandomAccessFile; |
32 import java.io.RandomAccessFile; |
|
33 import java.lang.ref.Reference; |
33 import java.lang.ref.SoftReference; |
34 import java.lang.ref.SoftReference; |
34 import java.util.ArrayList; |
35 import java.util.ArrayList; |
35 import java.util.Arrays; |
36 import java.util.Arrays; |
36 import java.util.Calendar; |
37 import java.util.Calendar; |
37 import java.util.Collections; |
38 import java.util.Collections; |
87 private Map<RelativeDirectory, DirectoryEntry> directories = Collections.<RelativeDirectory, DirectoryEntry>emptyMap(); |
88 private Map<RelativeDirectory, DirectoryEntry> directories = Collections.<RelativeDirectory, DirectoryEntry>emptyMap(); |
88 private Set<RelativeDirectory> allDirs = Collections.<RelativeDirectory>emptySet(); |
89 private Set<RelativeDirectory> allDirs = Collections.<RelativeDirectory>emptySet(); |
89 |
90 |
90 // ZipFileIndex data entries |
91 // ZipFileIndex data entries |
91 private File zipFile; |
92 private File zipFile; |
|
93 private Reference<File> absFileRef; |
92 private long zipFileLastModified = NOT_MODIFIED; |
94 private long zipFileLastModified = NOT_MODIFIED; |
93 private RandomAccessFile zipRandomFile; |
95 private RandomAccessFile zipRandomFile; |
94 private Entry[] entries; |
96 private Entry[] entries; |
95 |
97 |
96 private boolean readFromIndex = false; |
98 private boolean readFromIndex = false; |
1213 |
1215 |
1214 public File getZipFile() { |
1216 public File getZipFile() { |
1215 return zipFile; |
1217 return zipFile; |
1216 } |
1218 } |
1217 |
1219 |
|
1220 File getAbsoluteFile() { |
|
1221 File absFile = (absFileRef == null ? null : absFileRef.get()); |
|
1222 if (absFile == null) { |
|
1223 absFile = zipFile.getAbsoluteFile(); |
|
1224 absFileRef = new SoftReference<File>(absFile); |
|
1225 } |
|
1226 return absFile; |
|
1227 } |
|
1228 |
1218 private RelativeDirectory getRelativeDirectory(String path) { |
1229 private RelativeDirectory getRelativeDirectory(String path) { |
1219 RelativeDirectory rd; |
1230 RelativeDirectory rd; |
1220 SoftReference<RelativeDirectory> ref = relativeDirectoryCache.get(path); |
1231 SoftReference<RelativeDirectory> ref = relativeDirectoryCache.get(path); |
1221 if (ref != null) { |
1232 if (ref != null) { |
1222 rd = ref.get(); |
1233 rd = ref.get(); |