001 /** 002 * Copyright 2010-2013 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.codehaus.mojo.license; 017 018 /* 019 * Codehaus License Maven Plugin 020 * 021 * This program is free software: you can redistribute it and/or modify 022 * it under the terms of the GNU Lesser General Public License as published by 023 * the Free Software Foundation, either version 3 of the License, or 024 * (at your option) any later version. 025 * 026 * This program is distributed in the hope that it will be useful, 027 * but WITHOUT ANY WARRANTY; without even the implied warranty of 028 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 029 * GNU Lesser General Public License for more details. 030 * 031 * You should have received a copy of the GNU Lesser General Public License 032 * along with this program. If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>. 033 */ 034 035 import org.codehaus.plexus.util.FileUtils; 036 import org.codehaus.plexus.util.IOUtil; 037 038 import java.io.*; 039 040 /** 041 * Some basic file io utilities 042 * 043 * @author pgier 044 * @author tchemit <chemit@codelutin.com> 045 * @since 1.0 046 */ 047 public class FileUtil 048 { 049 050 public static void tryClose( InputStream is ) 051 { 052 if ( is == null ) 053 { 054 return; 055 } 056 try 057 { 058 is.close(); 059 } 060 catch ( IOException e ) 061 { 062 // do nothing 063 } 064 } 065 066 public static void tryClose( OutputStream os ) 067 { 068 if ( os == null ) 069 { 070 return; 071 } 072 try 073 { 074 os.close(); 075 } 076 catch ( IOException e ) 077 { 078 // do nothing 079 } 080 } 081 082 /** 083 * Creates the directory (and his parents) if necessary. 084 * 085 * @param dir the directory to create if not exisiting 086 * @return {@code true} if directory was created, {@code false} if was no 087 * need to create it 088 * @throws IOException if could not create directory 089 */ 090 public static boolean createDirectoryIfNecessary( File dir ) 091 throws IOException 092 { 093 if ( !dir.exists() ) 094 { 095 boolean b = dir.mkdirs(); 096 if ( !b ) 097 { 098 throw new IOException( "Could not create directory " + dir ); 099 } 100 return true; 101 } 102 return false; 103 } 104 105 public static boolean createNewFile( File file ) 106 throws IOException 107 { 108 createDirectoryIfNecessary( file.getParentFile() ); 109 if ( !file.exists() ) 110 { 111 boolean b = file.createNewFile(); 112 if ( !b ) 113 { 114 throw new IOException( "Could not create new file " + file ); 115 } 116 return true; 117 } 118 return false; 119 } 120 121 /** 122 * Delete the given file. 123 * 124 * @param file the file to delete 125 * @throws IOException if could not delete the file 126 */ 127 public static void deleteFile( File file ) 128 throws IOException 129 { 130 if ( !file.exists() ) 131 { 132 // file does not exist, can not delete it 133 return; 134 } 135 boolean b = file.delete(); 136 if ( !b ) 137 { 138 throw new IOException( "could not delete file " + file ); 139 } 140 } 141 142 /** 143 * Rename the given file to a new destination. 144 * 145 * @param file the file to rename 146 * @param destination the destination file 147 * @throws IOException if could not rename the file 148 */ 149 public static void renameFile( File file, File destination ) 150 throws IOException 151 { 152 boolean b = file.renameTo( destination ); 153 if ( !b ) 154 { 155 throw new IOException( "could not rename " + file + " to " + destination ); 156 } 157 } 158 159 /** 160 * Copy a file to a given locationand logging. 161 * 162 * @param source represents the file to copy. 163 * @param target file name of destination file. 164 * @throws IOException if could not copy file. 165 */ 166 public static void copyFile( File source, File target ) 167 throws IOException 168 { 169 createDirectoryIfNecessary( target.getParentFile() ); 170 FileUtils.copyFile( source, target ); 171 } 172 173 public static File getFile( File base, String... paths ) 174 { 175 StringBuilder buffer = new StringBuilder(); 176 for ( String path : paths ) 177 { 178 buffer.append( File.separator ).append( path ); 179 } 180 return new File( base, buffer.substring( 1 ) ); 181 } 182 183 /** 184 * @param file the source file 185 * @return the backup file 186 */ 187 public static File getBackupFile( File file ) 188 { 189 return new File( file.getAbsolutePath() + "~" ); 190 } 191 192 /** 193 * Backups the given file using the {@link FileUtil#getBackupFile(File)} as 194 * destination file. 195 * 196 * @param f the file to backup 197 * @throws IOException if any pb while copying the file 198 */ 199 public static void backupFile( File f ) 200 throws IOException 201 { 202 File dst = FileUtil.getBackupFile( f ); 203 copyFile( f, dst ); 204 } 205 206 /** 207 * Permet de lire un fichier et de retourner sont contenu sous forme d'une 208 * chaine de carateres 209 * 210 * @param file le fichier a lire 211 * @param encoding encoding to read file 212 * @return the content of the file 213 * @throws IOException if IO pb 214 */ 215 static public String readAsString( File file, String encoding ) 216 throws IOException 217 { 218 FileInputStream inf = new FileInputStream( file ); 219 BufferedReader in = new BufferedReader( new InputStreamReader( inf, encoding ) ); 220 try 221 { 222 return IOUtil.toString( in ); 223 } 224 finally 225 { 226 in.close(); 227 } 228 } 229 230 /** 231 * Sauvegarde un contenu dans un fichier. 232 * 233 * @param file le fichier a ecrire 234 * @param content le contenu du fichier 235 * @param encoding l'encoding d'ecriture 236 * @throws IOException if IO pb 237 */ 238 public static void writeString( File file, String content, String encoding ) 239 throws IOException 240 { 241 createDirectoryIfNecessary( file.getParentFile() ); 242 BufferedWriter out; 243 out = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( file ), encoding ) ); 244 try 245 { 246 IOUtil.copy( content, out ); 247 } 248 finally 249 { 250 out.close(); 251 } 252 } 253 }