PageRenderTime 49ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/open-dm-dq/inti/components/src/main/java/com/sun/inti/components/util/IOUtils.java

https://bitbucket.org/pymma/mosaic
Java | 161 lines | 144 code | 16 blank | 1 comment | 24 complexity | 934f875d6e33a73b45ebc4ac1f736572 MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.0
  1. package com.sun.inti.components.util;
  2. import java.io.File;
  3. import java.io.FileFilter;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.OutputStream;
  9. import java.util.ArrayList;
  10. import java.util.Collections;
  11. import java.util.Enumeration;
  12. import java.util.List;
  13. import java.util.logging.Logger;
  14. import java.util.regex.Pattern;
  15. import java.util.zip.ZipEntry;
  16. import java.util.zip.ZipFile;
  17. import java.util.zip.ZipInputStream;
  18. public class IOUtils {
  19. private static final Logger logger = Logger.getLogger(IOUtils.class.getName());
  20. public static FileFilter getDirectoryFilter(String... exclusionPatterns) {
  21. final Pattern[] patterns = new Pattern[exclusionPatterns.length];
  22. for (int i = 0; i < patterns.length; i++) {
  23. patterns[i] = Pattern.compile(exclusionPatterns[i]);
  24. }
  25. return new FileFilter() {
  26. public boolean accept(File file) {
  27. if (file.isDirectory()) {
  28. for (Pattern pattern: patterns) {
  29. if (pattern.matcher(file.getName()).find()) {
  30. return false;
  31. }
  32. }
  33. return true;
  34. }
  35. return false;
  36. }
  37. };
  38. }
  39. public static void recursiveDelete(File file) {
  40. doRecursiveDelete(file);
  41. }
  42. private static void doRecursiveDelete(File file) {
  43. if (file.isDirectory()) {
  44. for (File childFile: file.listFiles()) {
  45. doRecursiveDelete(childFile);
  46. }
  47. }
  48. if (!file.delete()) {
  49. logger.warning("Can't delete: " + file.getAbsolutePath());
  50. }
  51. }
  52. public static File[] recursiveListFiles(File directory) {
  53. return recursiveListFiles(directory, null);
  54. }
  55. public static File[] recursiveListFiles(File directory, FileFilter fileFilter) {
  56. List<File> acceptedFiles = new ArrayList<File>();
  57. recursiveListFiles(directory, fileFilter, acceptedFiles);
  58. Collections.sort(acceptedFiles);
  59. return acceptedFiles.toArray(new File[acceptedFiles.size()]);
  60. }
  61. private static void recursiveListFiles(File file, FileFilter fileFilter, List<File> acceptedFiles) {
  62. if (file.isDirectory()) {
  63. for (File childFile: file.listFiles()) {
  64. recursiveListFiles(childFile, fileFilter, acceptedFiles);
  65. }
  66. } else {
  67. if (fileFilter == null || fileFilter.accept(file)) {
  68. acceptedFiles.add(file);
  69. }
  70. }
  71. }
  72. public static void copyDirectory(File inputDirectory, File outputDirectory) throws IOException {
  73. File[] inputFiles = recursiveListFiles(inputDirectory, new FileFilter() {
  74. public boolean accept(File file) {
  75. return file.isFile();
  76. }
  77. });
  78. for (File inputFile: inputFiles) {
  79. copy(inputFile, new File(outputDirectory, inputFile.getPath()));
  80. }
  81. }
  82. public static void copy(File input, File output) throws IOException {
  83. copy(new FileInputStream(input), new FileOutputStream(output));
  84. }
  85. private static final int BUFFER_SIZE = 4096;
  86. public static void copy(InputStream is, OutputStream os) throws IOException {
  87. copy(is, os, true);
  88. }
  89. public static void copy(InputStream is, OutputStream os, boolean close) throws IOException {
  90. int count;
  91. byte[] buffer = new byte[BUFFER_SIZE];
  92. while ((count = is.read(buffer)) != -1) {
  93. os.write(buffer, 0, count);
  94. }
  95. os.flush();
  96. if (close) {
  97. is.close();
  98. os.close();
  99. }
  100. }
  101. public static void extract(ZipFile zipFile, File directory) throws IOException {
  102. Enumeration<?extends ZipEntry> i = zipFile.entries();
  103. while (i.hasMoreElements()) {
  104. ZipEntry zipEntry = i.nextElement();
  105. if (!zipEntry.isDirectory()) {
  106. String entryName = zipEntry.getName();
  107. File file = new File(directory, normalizeZipSeparator(entryName));
  108. file.getParentFile().mkdirs();
  109. InputStream is = zipFile.getInputStream(zipEntry);
  110. FileOutputStream os = new FileOutputStream(file);
  111. copy(is, os);
  112. }
  113. }
  114. }
  115. public static void extract(InputStream is, File directory) throws IOException {
  116. ZipInputStream zis = new ZipInputStream(is);
  117. ZipEntry zipEntry;
  118. while ((zipEntry = zis.getNextEntry()) != null) {
  119. String entryName = normalizeZipSeparator(zipEntry.getName());
  120. if (zipEntry.isDirectory()) {
  121. new File(directory, entryName).mkdirs();
  122. } else {
  123. File file = new File(directory, entryName);
  124. file.getParentFile().mkdirs();
  125. OutputStream os = new FileOutputStream(file);
  126. copy(zis, os, false);
  127. os.close();
  128. }
  129. }
  130. zis.close();
  131. }
  132. // FIXME This is a workaround for a ZipFile bug under Windows
  133. public static String normalizeZipSeparator(String name) {
  134. return name.replace('\\', '/');
  135. }
  136. public static String basename(String filename) {
  137. filename = filename.replace(File.separatorChar, '/');
  138. int separatorPosition = filename.lastIndexOf('/');
  139. int extensionPosition = filename.lastIndexOf('.');
  140. if (extensionPosition < 0) {
  141. return filename.substring(separatorPosition + 1);
  142. }
  143. return filename.substring(separatorPosition + 1, extensionPosition);
  144. }
  145. }