001/** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.activemq.util; 018 019import java.io.File; 020import java.io.FileInputStream; 021import java.io.FileOutputStream; 022import java.io.IOException; 023import java.io.InputStream; 024import java.io.OutputStream; 025 026/** 027 * 028 */ 029public final class IOHelper { 030 protected static final int MAX_DIR_NAME_LENGTH; 031 protected static final int MAX_FILE_NAME_LENGTH; 032 private static final int DEFAULT_BUFFER_SIZE = 4096; 033 private IOHelper() { 034 } 035 036 public static String getDefaultDataDirectory() { 037 return getDefaultDirectoryPrefix() + "activemq-data"; 038 } 039 040 public static String getDefaultStoreDirectory() { 041 return getDefaultDirectoryPrefix() + "amqstore"; 042 } 043 044 /** 045 * Allows a system property to be used to overload the default data 046 * directory which can be useful for forcing the test cases to use a target/ 047 * prefix 048 */ 049 public static String getDefaultDirectoryPrefix() { 050 try { 051 return System.getProperty("org.apache.activemq.default.directory.prefix", ""); 052 } catch (Exception e) { 053 return ""; 054 } 055 } 056 057 public static boolean deleteFile(File fileToDelete) { 058 if (fileToDelete == null || !fileToDelete.exists()) { 059 return true; 060 } 061 boolean result = deleteChildren(fileToDelete); 062 result &= fileToDelete.delete(); 063 return result; 064 } 065 066 public static boolean deleteChildren(File parent) { 067 if (parent == null || !parent.exists()) { 068 return false; 069 } 070 boolean result = true; 071 if (parent.isDirectory()) { 072 File[] files = parent.listFiles(); 073 if (files == null) { 074 result = false; 075 } else { 076 for (int i = 0; i < files.length; i++) { 077 File file = files[i]; 078 if (file.getName().equals(".") 079 || file.getName().equals("..")) { 080 continue; 081 } 082 if (file.isDirectory()) { 083 result &= deleteFile(file); 084 } else { 085 result &= file.delete(); 086 } 087 } 088 } 089 } 090 091 return result; 092 } 093 094 095 public static void moveFile(File src, File targetDirectory) throws IOException { 096 if (!src.renameTo(new File(targetDirectory, src.getName()))) { 097 throw new IOException("Failed to move " + src + " to " + targetDirectory); 098 } 099 } 100 101 public static void copyFile(File src, File dest) throws IOException { 102 FileInputStream fileSrc = new FileInputStream(src); 103 FileOutputStream fileDest = new FileOutputStream(dest); 104 copyInputStream(fileSrc, fileDest); 105 } 106 107 public static void copyInputStream(InputStream in, OutputStream out) throws IOException { 108 byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; 109 int len = in.read(buffer); 110 while (len >= 0) { 111 out.write(buffer, 0, len); 112 len = in.read(buffer); 113 } 114 in.close(); 115 out.close(); 116 } 117 118 static { 119 MAX_DIR_NAME_LENGTH = Integer.valueOf(System.getProperty("MaximumDirNameLength","200")).intValue(); 120 MAX_FILE_NAME_LENGTH = Integer.valueOf(System.getProperty("MaximumFileNameLength","64")).intValue(); 121 } 122 123 124 public static void mkdirs(File dir) throws IOException { 125 if (dir.exists()) { 126 if (!dir.isDirectory()) { 127 throw new IOException("Failed to create directory '" + dir +"', regular file already existed with that name"); 128 } 129 130 } else { 131 if (!dir.mkdirs()) { 132 throw new IOException("Failed to create directory '" + dir+"'"); 133 } 134 } 135 } 136}