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