You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2022/06/03 06:35:43 UTC
[uima-uimaj] 01/01: [UIMA-6469] Cleaning up file-handling code
This is an automated email from the ASF dual-hosted git repository.
rec pushed a commit to branch UIMA-6469-Cleaning-up-file-handling-code
in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git
commit 1088f615154b385dd163965b8d2ef78e87111ab1
Author: Richard Eckart de Castilho <re...@apache.org>
AuthorDate: Fri Jun 3 08:35:36 2022 +0200
[UIMA-6469] Cleaning up file-handling code
- Introduce various constants
- Use try-with-resources to more effect
---
.../java/org/apache/uima/pear/util/FileUtil.java | 345 ++++++++++-----------
1 file changed, 169 insertions(+), 176 deletions(-)
diff --git a/uimaj-core/src/main/java/org/apache/uima/pear/util/FileUtil.java b/uimaj-core/src/main/java/org/apache/uima/pear/util/FileUtil.java
index f5f430938..3874c3129 100644
--- a/uimaj-core/src/main/java/org/apache/uima/pear/util/FileUtil.java
+++ b/uimaj-core/src/main/java/org/apache/uima/pear/util/FileUtil.java
@@ -63,8 +63,14 @@ import org.apache.uima.util.impl.Constants;
/**
* The <code>FileUtil</code> class provides utility methods for working with general files.
*/
-
public class FileUtil {
+ private static final String UTF8_ENCODING = "UTF-8";
+ private static final String ASCII_ENCODING = "ASCII";
+ private static final String XML_EXTENSION = ".xml";
+ private static final String BACKUP_EXTENSION = ".bak";
+ private static final String ZIP_EXTENSION = ".zip";
+ private static final char UNIX_SEPARATOR = '/';
+ private static final char WINDOWS_SEPARATOR = '\\';
/**
* The <code>FileTimeComparator</code> class allows comparing 'last modified' time in 2 given
@@ -116,11 +122,12 @@ public class FileUtil {
* The given file extension.
*/
public DirFileFilter(String dirPath, String fileExt) {
- _dirPath = (dirPath != null) ? dirPath.replace('\\', '/') : null;
- if (fileExt != null)
+ _dirPath = (dirPath != null) ? dirPath.replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR) : null;
+ if (fileExt != null) {
_fileExt = fileExt.startsWith(".") ? fileExt.toLowerCase() : "." + fileExt.toLowerCase();
- else
+ } else {
_fileExt = null;
+ }
}
/**
@@ -134,7 +141,8 @@ public class FileUtil {
boolean extAccepted = true;
if (_dirPath != null) {
String parentDir = file.getParent();
- dirAccepted = parentDir != null && parentDir.replace('\\', '/').startsWith(_dirPath);
+ dirAccepted = parentDir != null
+ && parentDir.replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR).startsWith(_dirPath);
}
if (_fileExt != null) {
extAccepted = file.getPath().toLowerCase().endsWith(_fileExt);
@@ -145,7 +153,6 @@ public class FileUtil {
/**
* The <code>NameFileFilter</code> class allows to filter files based on specified file name.
- *
*/
public static class NameFileFilter implements FileFilter {
// attributes
@@ -158,7 +165,7 @@ public class FileUtil {
* The given file name for filtering.
*/
public NameFileFilter(String fileName) {
- _fileName = fileName.replace('\\', '/');
+ _fileName = fileName.replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR);
}
/**
@@ -168,14 +175,16 @@ public class FileUtil {
*/
@Override
public boolean accept(File file) {
- String filePath = file.getAbsolutePath().replace('\\', '/');
+ String filePath = file.getAbsolutePath().replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR);
if (filePath.endsWith(_fileName)) {
if (filePath.length() > _fileName.length()) {
char prevChar = filePath.charAt(filePath.length() - _fileName.length() - 1);
- if (prevChar == ':' || prevChar == '/')
+ if (prevChar == ':' || prevChar == UNIX_SEPARATOR) {
return true;
- } else
+ }
+ } else {
return true;
+ }
}
return false;
}
@@ -218,8 +227,9 @@ public class FileUtil {
public ExtFilenameFilter(String fileExt, boolean ignoreCase) {
_fileExt = fileExt.startsWith(".") ? fileExt : "." + fileExt;
_ignoreCase = ignoreCase;
- if (ignoreCase)
+ if (ignoreCase) {
_fileExt = _fileExt.toLowerCase();
+ }
}
/**
@@ -258,15 +268,17 @@ public class FileUtil {
File aFile = allDirFiles[i];
if (aFile.isDirectory()) {
counter += cleanUpDirectoryContent(aFile);
- if (aFile.delete())
+ if (aFile.delete()) {
counter++;
- else
+ } else {
aFile.deleteOnExit();
+ }
} else if (aFile.isFile()) {
- if (aFile.delete())
+ if (aFile.delete()) {
counter++;
- else
+ } else {
aFile.deleteOnExit();
+ }
}
}
}
@@ -290,10 +302,11 @@ public class FileUtil {
for (int i = 0; i < allDirFiles.length; i++) {
File aFile = allDirFiles[i];
if (aFile.isFile()) {
- if (aFile.delete())
+ if (aFile.delete()) {
counter++;
- else
+ } else {
aFile.deleteOnExit();
+ }
}
}
}
@@ -324,10 +337,11 @@ public class FileUtil {
File file = list.next();
no++;
if (no > maxLimit) {
- if (file.delete())
+ if (file.delete()) {
counter++;
- else
+ } else {
file.deleteOnExit();
+ }
}
}
}
@@ -350,25 +364,28 @@ public class FileUtil {
*/
public static String computeRelativePath(File referenceDir, File file) throws IOException {
// get canonical path expressions
- String refPath = referenceDir.getCanonicalPath().replace('\\', '/');
- String filePath = file.getCanonicalPath().replace('\\', '/');
+ String refPath = referenceDir.getCanonicalPath().replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR);
+ String filePath = file.getCanonicalPath().replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR);
// compute relative path from reference dir to file dir-tree
StringBuffer relBuffer = new StringBuffer();
while (refPath != null && !filePath.startsWith(refPath)) {
relBuffer.append("../");
refPath = (new File(refPath)).getParent();
- if (refPath != null)
- refPath = refPath.replace('\\', '/');
+ if (refPath != null) {
+ refPath = refPath.replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR);
+ }
}
if (refPath != null) {
// construct relative path
String subPath = filePath.substring(refPath.length());
- if (relBuffer.length() == 0)
+ if (relBuffer.length() == 0) {
relBuffer.append("./");
- if (subPath.startsWith("/"))
+ }
+ if (subPath.startsWith("/")) {
relBuffer.append(subPath.substring(1));
- else
+ } else {
relBuffer.append(subPath);
+ }
return relBuffer.toString();
}
// relative path does not exist
@@ -466,14 +483,16 @@ public class FileUtil {
throws IOException {
ArrayList<File> listOfDirs = new ArrayList<>();
File[] allDirFiles = rootDir.listFiles();
- if (allDirFiles == null)
+ if (allDirFiles == null) {
throw new FileNotFoundException("invalid directory specified");
+ }
for (int i = 0; i < allDirFiles.length; i++) {
File aFile = allDirFiles[i];
if (aFile.isDirectory()) {
listOfDirs.add(aFile);
- if (includeSubdirs)
+ if (includeSubdirs) {
listOfDirs.addAll(createDirList(aFile, includeSubdirs));
+ }
}
}
return listOfDirs;
@@ -503,14 +522,15 @@ public class FileUtil {
while (entries.hasMoreElements()) {
JarEntry entry = entries.nextElement();
File file = new File(rootDir, entry.getName());
- if (entry.isDirectory())
+ if (entry.isDirectory()) {
listOfDirs.add(file);
- else {
+ } else {
// make sure the parent dir is added
File parentDir = file.getParentFile();
while (!parentDir.equals(rootDir)) {
- if (!listOfDirs.contains(parentDir))
+ if (!listOfDirs.contains(parentDir)) {
listOfDirs.add(parentDir);
+ }
parentDir = parentDir.getParentFile();
}
}
@@ -553,14 +573,16 @@ public class FileUtil {
throws IOException {
ArrayList<File> listOfFiles = new ArrayList<>();
File[] allDirFiles = filesDir.listFiles();
- if (allDirFiles == null)
+ if (allDirFiles == null) {
throw new FileNotFoundException("invalid directory specified");
+ }
for (int i = 0; i < allDirFiles.length; i++) {
File aFile = allDirFiles[i];
- if (aFile.isDirectory() && includeSubdirs)
+ if (aFile.isDirectory() && includeSubdirs) {
listOfFiles.addAll(createFileList(aFile, includeSubdirs));
- else if (!aFile.isDirectory())
+ } else if (!aFile.isDirectory()) {
listOfFiles.add(aFile);
+ }
}
return listOfFiles;
}
@@ -588,8 +610,9 @@ public class FileUtil {
while (entries.hasMoreElements()) {
JarEntry entry = entries.nextElement();
File file = new File(rootDir, entry.getName());
- if (!entry.isDirectory())
+ if (!entry.isDirectory()) {
listOfFiles.add(file);
+ }
}
return listOfFiles;
}
@@ -614,13 +637,16 @@ public class FileUtil {
@Deprecated
public static File createTempFile(String prefix, String suffix) throws IOException {
String tempDirPath = System.getProperty("java.io.tmpdir");
- if (tempDirPath == null)
+ if (tempDirPath == null) {
tempDirPath = System.getProperty("user.home");
- if (tempDirPath == null)
+ }
+ if (tempDirPath == null) {
throw new IOException("could not find temporary directory");
+ }
File tempDir = new File(tempDirPath);
- if (!tempDir.isDirectory())
+ if (!tempDir.isDirectory()) {
throw new IOException("temporary directory not available");
+ }
return File.createTempFile(prefix, suffix, tempDir);
}
@@ -643,9 +669,9 @@ public class FileUtil {
// first, delete plain files and sub-directories (recursive)
for (int i = 0; i < fileList.length; i++) {
File entry = fileList[i];
- if (entry.isDirectory())
+ if (entry.isDirectory()) {
done = deleteDirectory(entry);
- else if (!entry.delete()) {
+ } else if (!entry.delete()) {
entry.deleteOnExit();
done = false;
}
@@ -735,14 +761,16 @@ public class FileUtil {
JarEntry jarEntry = jarList.nextElement();
if (!jarEntry.isDirectory()) {
// check that file is accepted
- if (filter != null && !filter.accept(new File(jarEntry.getName())))
+ if (filter != null && !filter.accept(new File(jarEntry.getName()))) {
continue;
+ }
// extract file
File file = new File(targetDir, jarEntry.getName());
// make sure the file directory exists
File dir = file.getParentFile();
- if (!dir.exists() && !dir.mkdirs())
+ if (!dir.exists() && !dir.mkdirs()) {
throw new IOException("could not create directory " + dir.getAbsolutePath());
+ }
try (BufferedInputStream iStream = new BufferedInputStream(
jarFile.getInputStream(jarEntry));
BufferedOutputStream oStream = new BufferedOutputStream(
@@ -787,10 +815,11 @@ public class FileUtil {
buffer.append('.');
for (int i = begIndex + 1; i < fileName.length(); i++) {
char ch = fileName.charAt(i);
- if (Character.isLetterOrDigit(ch))
+ if (Character.isLetterOrDigit(ch)) {
buffer.append(ch);
- else
+ } else {
break;
+ }
}
}
return buffer.toString();
@@ -809,9 +838,9 @@ public class FileUtil {
long fileSize = 0;
// choose file size method: local FS or HTTP
File file = new File(fileLocation);
- if (file.isFile())
+ if (file.isFile()) {
fileSize = file.length();
- else {
+ } else {
try {
URL fileUrl = new URL(fileLocation);
URLConnection urlConn = fileUrl.openConnection();
@@ -836,12 +865,14 @@ public class FileUtil {
* @return The relative path of the given object, located in the given root directory.
*/
public static String getRelativePath(File rootDir, String absolutePath) {
- String rootDirPath = rootDir.getAbsolutePath().replace('\\', '/');
- String objectPath = absolutePath.replace('\\', '/');
- if (objectPath.startsWith(rootDirPath))
+ String rootDirPath = rootDir.getAbsolutePath().replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR);
+ String objectPath = absolutePath.replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR);
+ if (objectPath.startsWith(rootDirPath)) {
objectPath = objectPath.substring(rootDirPath.length());
- if (objectPath.startsWith("/"))
+ }
+ if (objectPath.startsWith("/")) {
objectPath = objectPath.substring(1);
+ }
return objectPath;
}
@@ -861,20 +892,23 @@ public class FileUtil {
String utfSignature = null;
if (length == 3) {
// check for UTF-8 signature
- if (prefix[0] == 0xEF && prefix[1] == 0xBB && prefix[2] == 0xBF)
- utfSignature = "UTF-8";
+ if (prefix[0] == 0xEF && prefix[1] == 0xBB && prefix[2] == 0xBF) {
+ utfSignature = UTF8_ENCODING;
+ }
} else if (length == 2) {
// check for UTF-16 signature
- if (prefix[0] == 0xFE && prefix[1] == 0xFF)
+ if (prefix[0] == 0xFE && prefix[1] == 0xFF) {
utfSignature = "UTF-16BE";
- else if (prefix[0] == 0xFF && prefix[1] == 0xFE)
+ } else if (prefix[0] == 0xFF && prefix[1] == 0xFE) {
utfSignature = "UTF-16LE";
+ }
} else if (length == 4) {
// check for UTF-32 signature
- if (prefix[0] == 0x00 && prefix[1] == 0x00 && prefix[2] == 0xFE && prefix[3] == 0xFF)
+ if (prefix[0] == 0x00 && prefix[1] == 0x00 && prefix[2] == 0xFE && prefix[3] == 0xFF) {
utfSignature = "UTF-32BE";
- else if (prefix[0] == 0xFF && prefix[1] == 0xFE && prefix[2] == 0x00 && prefix[3] == 0x00)
+ } else if (prefix[0] == 0xFF && prefix[1] == 0xFE && prefix[2] == 0x00 && prefix[3] == 0x00) {
utfSignature = "UTF-32LE";
+ }
}
return utfSignature;
}
@@ -891,23 +925,9 @@ public class FileUtil {
* If an I/O exception occurred.
*/
public static boolean isAsciiFile(File textFile) throws IOException {
- boolean isAscii = true;
- FileInputStream iStream = null;
- try {
- iStream = new FileInputStream(textFile);
- isAscii = isAsciiStream(iStream);
- iStream.close();
- } catch (IOException exc) {
- isAscii = false;
- throw exc;
- } finally {
- if (iStream != null)
- try {
- iStream.close();
- } catch (Exception e) {
- }
+ try (FileInputStream iStream = new FileInputStream(textFile)) {
+ return isAsciiStream(iStream);
}
- return isAscii;
}
/**
@@ -923,17 +943,12 @@ public class FileUtil {
*/
public static boolean isAsciiStream(InputStream iStream) throws IOException {
boolean isAscii = true;
- try {
- int nextByte = 0;
- while ((nextByte = iStream.read()) >= 0) {
- if (nextByte > 127) {
- isAscii = false;
- break;
- }
+ int nextByte = 0;
+ while ((nextByte = iStream.read()) >= 0) {
+ if (nextByte > 127) {
+ isAscii = false;
+ break;
}
- } catch (IOException exc) {
- isAscii = false;
- throw exc;
}
return isAscii;
}
@@ -953,8 +968,9 @@ public class FileUtil {
String line = null;
while ((line = iStream.readLine()) != null) {
String string = line.trim();
- if (string.length() > 0)
+ if (string.length() > 0) {
outputList.add(string);
+ }
}
if (outputList.size() > 0) {
outputArray = new String[outputList.size()];
@@ -1021,7 +1037,7 @@ public class FileUtil {
public static Properties loadPropertiesFromJar(String propFilePath, JarFile jarFile)
throws IOException {
Properties properties = null;
- String name = propFilePath.replace('\\', '/');
+ String name = propFilePath.replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR);
JarEntry jarEntry = jarFile.getJarEntry(name);
if (jarEntry != null) {
try (InputStream iStream = jarFile.getInputStream(jarEntry)) {
@@ -1042,26 +1058,13 @@ public class FileUtil {
* If any I/O exception occurs.
*/
public static String loadTextFile(BufferedReader iStream) throws IOException {
- StringWriter buffer = null;
- PrintWriter writer = null;
- try {
- buffer = new StringWriter();
- writer = new PrintWriter(buffer);
+ try (StringWriter buffer = new StringWriter(); PrintWriter writer = new PrintWriter(buffer);) {
String line = null;
- while ((line = iStream.readLine()) != null)
+ while ((line = iStream.readLine()) != null) {
writer.println(line);
- writer.flush();
- } catch (IOException exc) {
- throw exc;
- } finally {
- if (writer != null) {
- try {
- writer.close();
- } catch (Exception e) {
- }
}
+ return buffer.toString();
}
- return buffer.toString();
}
/**
@@ -1078,11 +1081,9 @@ public class FileUtil {
*/
@Deprecated
public static String loadTextFile(File textFile) throws IOException {
- String content;
try (BufferedReader iStream = new BufferedReader(new FileReader(textFile))) {
- content = loadTextFile(iStream);
+ return loadTextFile(iStream);
}
- return content;
}
/**
@@ -1155,7 +1156,7 @@ public class FileUtil {
*/
public static String loadTextFileFromJar(String filePath, JarFile jarFile) throws IOException {
String content = null;
- String name = filePath.replace('\\', '/');
+ String name = filePath.replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR);
JarEntry jarEntry = jarFile.getJarEntry(name);
if (jarEntry != null) {
try (BufferedReader iStream = new BufferedReader(
@@ -1176,7 +1177,7 @@ public class FileUtil {
public static String localPathToFileUrl(String path) {
// get absolute path
File file = new File(path);
- String absPath = file.getAbsolutePath().replace('\\', '/');
+ String absPath = file.getAbsolutePath().replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR);
// construct file URL
StringBuffer urlBuffer = new StringBuffer("file:///");
urlBuffer.append(absPath.replace(':', '|'));
@@ -1207,8 +1208,9 @@ public class FileUtil {
public static boolean moveFile(File source, File destinationDir) throws IOException {
boolean completed = false;
File destination = new File(destinationDir, source.getName());
- if (destination.exists())
+ if (destination.exists()) {
destination.delete();
+ }
if (copyFile(source, destination)) {
completed = source.delete();
}
@@ -1234,23 +1236,22 @@ public class FileUtil {
throws IOException {
int counter = 0;
// for general text file - supporting ASCII encoding only
- String encoding = "ASCII";
+ String encoding = ASCII_ENCODING;
// check file extension
int extIndex = textFile.getName().lastIndexOf('.');
String fileExt = (extIndex > 0) ? textFile.getName().substring(extIndex) : null;
- if (".xml".equalsIgnoreCase(fileExt)) {
+ if (XML_EXTENSION.equalsIgnoreCase(fileExt)) {
// for XML file - supporting UTF-8 (ASCII) and UTF-16 encodings
String xmlEncoding = XMLUtil.detectXmlFileEncoding(textFile);
if (xmlEncoding != null) {
encoding = xmlEncoding;
} else {
- encoding = "UTF-8";
+ encoding = UTF8_ENCODING;
}
}
// load text file, using supported encoding
String fileContent = loadTextFile(textFile, encoding);
- BufferedReader sReader = null;
- PrintStream fStream = null;
+
boolean done = false;
File backupFile = null;
// get pattern for given regex
@@ -1259,51 +1260,48 @@ public class FileUtil {
String replaceWith = StringUtil.toRegExpReplacement(replacement);
try {
// save backup copy of input file
- backupFile = new File(textFile.getAbsolutePath() + ".bak");
- if (backupFile.exists())
+ backupFile = new File(textFile.getAbsolutePath() + BACKUP_EXTENSION);
+ if (backupFile.exists()) {
backupFile.delete();
- if (!textFile.renameTo(backupFile))
+ }
+ if (!textFile.renameTo(backupFile)) {
throw new IOException("can't save backup copy of " + textFile.getAbsolutePath());
- sReader = new BufferedReader(new StringReader(fileContent));
- fStream = new PrintStream(new FileOutputStream(textFile), true, encoding);
- String srcLine = null;
- while ((srcLine = sReader.readLine()) != null) {
- // count pattern matches in the source string
- Matcher matcher = pattern.matcher(srcLine);
- while (matcher.find())
- counter++;
- // replace all pattern matches in the source string
- String resLine = srcLine.replaceAll(subStringRegex, replaceWith);
- fStream.println(resLine);
}
- fStream.close();
+ try (BufferedReader sReader = new BufferedReader(new StringReader(fileContent));
+ PrintStream fStream = new PrintStream(new FileOutputStream(textFile), true,
+ encoding);) {
+ String srcLine = null;
+ while ((srcLine = sReader.readLine()) != null) {
+ // count pattern matches in the source string
+ Matcher matcher = pattern.matcher(srcLine);
+ while (matcher.find()) {
+ counter++;
+ }
+ // replace all pattern matches in the source string
+ String resLine = srcLine.replaceAll(subStringRegex, replaceWith);
+ fStream.println(resLine);
+ }
+ }
done = true;
} catch (IOException exc) {
throw exc;
} catch (Throwable err) {
- if (err instanceof IOException)
+ if (err instanceof IOException) {
throw new IOException(err.toString() + " in " + textFile.getAbsolutePath());
+ }
throw new RuntimeException(err.toString() + " in " + textFile.getAbsolutePath());
} finally {
- if (sReader != null) {
- try {
- sReader.close();
- } catch (Exception e) {
- }
- }
- if (fStream != null) {
- try {
- fStream.close();
- } catch (Exception e) {
- }
- }
if (done) {
// remove backup file
- backupFile.delete();
+ if (backupFile != null) {
+ backupFile.delete();
+ }
} else {
// restore input file
textFile.delete();
- backupFile.renameTo(textFile);
+ if (backupFile != null) {
+ backupFile.renameTo(textFile);
+ }
}
}
return counter;
@@ -1334,7 +1332,7 @@ public class FileUtil {
*/
public static File zipDirectory(File dir2zip) throws IOException {
// construct zipped file path
- String zipFileName = dir2zip.getName() + ".zip";
+ String zipFileName = dir2zip.getName() + ZIP_EXTENSION;
File zipFile = new File(dir2zip, zipFileName);
return zipDirectory(dir2zip, zipFile);
}
@@ -1383,27 +1381,27 @@ public class FileUtil {
File referenceDir, File[] excludeFiles) throws IOException {
byte[] block = new byte[4096];
int inBytes = 0;
- FileInputStream iStream = null;
- try {
- // get list of all files/dirs in the given directory
- File[] dirFileList = dir2zip.listFiles();
- // compress all files and sub-dirs
- for (int i = 0; i < dirFileList.length; i++) {
- File entry = dirFileList[i];
- // check if this entry is not in the list of exclusions
- boolean isExcluded = false;
- for (int n = 0; n < excludeFiles.length; n++) {
- if (entry.equals(excludeFiles[n])) {
- isExcluded = true;
- break;
- }
+
+ // get list of all files/dirs in the given directory
+ File[] dirFileList = dir2zip.listFiles();
+ // compress all files and sub-dirs
+ for (int i = 0; i < dirFileList.length; i++) {
+ File entry = dirFileList[i];
+ // check if this entry is not in the list of exclusions
+ boolean isExcluded = false;
+ for (int n = 0; n < excludeFiles.length; n++) {
+ if (entry.equals(excludeFiles[n])) {
+ isExcluded = true;
+ break;
}
- if (isExcluded)
- continue;
- // for each file - add ZipEntry and compress the file
- if (entry.isFile()) {
- // open input stream
- iStream = new FileInputStream(entry);
+ }
+ if (isExcluded) {
+ continue;
+ }
+ // for each file - add ZipEntry and compress the file
+ if (entry.isFile()) {
+ // open input stream
+ try (FileInputStream iStream = new FileInputStream(entry)) {
// put ZipEntry for the file
String zipEntryName = (referenceDir != null)
? getRelativePath(referenceDir, entry.getAbsolutePath())
@@ -1411,21 +1409,15 @@ public class FileUtil {
ZipEntry zipEntry = new ZipEntry(zipEntryName);
zoStream.putNextEntry(zipEntry);
// read input stream and write to output stream
- while ((inBytes = iStream.read(block)) > 0)
+ while ((inBytes = iStream.read(block)) > 0) {
zoStream.write(block, 0, inBytes);
- // close input stream
- iStream.close();
- } else if (entry.isDirectory()) // zip sub-dir recursively
- zipDirectory(entry, zoStream, referenceDir, excludeFiles);
- }
- } finally {
- if (iStream != null) {
- try {
- iStream.close();
- } catch (Exception e) {
+ }
}
+ } else if (entry.isDirectory()) { // zip sub-dir recursively
+ zipDirectory(entry, zoStream, referenceDir, excludeFiles);
}
}
+
return zoStream;
}
@@ -1443,8 +1435,8 @@ public class FileUtil {
// construct zipped file path
String zipFileName = file2zip.getName();
int extIndex = zipFileName.lastIndexOf('.');
- zipFileName = (extIndex >= 0) ? zipFileName.substring(0, extIndex) + ".zip"
- : zipFileName + ".zip";
+ zipFileName = (extIndex >= 0) ? zipFileName.substring(0, extIndex) + ZIP_EXTENSION
+ : zipFileName + ZIP_EXTENSION;
File zipFile = new File(file2zip.getParentFile(), zipFileName);
return zipFile(file2zip, zipFile);
}
@@ -1475,8 +1467,9 @@ public class FileUtil {
// add new ZipEntry
oStream.putNextEntry(zipEntry);
// read input stream and write to output stream
- while ((inBytes = iStream.read(block)) > 0)
+ while ((inBytes = iStream.read(block)) > 0) {
oStream.write(block, 0, inBytes);
+ }
} finally {
if (iStream != null) {
try {