Here you can find the source of writeFileAtomically(File file, String content, String encoding)
public static void writeFileAtomically(File file, String content, String encoding) throws IOException
/**//w w w . j a v a2s. co m * Copyright 2009 Welocalize, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.log4j.Logger; public class Main{ static private final Logger logger = Logger.getLogger(FileUtil.class); /** * Writes a string to a file, creating the directory if necessary. The write * is done atomically by writing to a temporary file, then renaming the * temporary file to the final name. This avoids anyone trying to read the * file while it is being written. The temporary file ends in .tmp. */ public static void writeFileAtomically(File file, String content, String encoding) throws IOException { File parent = file.getParentFile(); if (!parent.exists()) { parent.mkdirs(); } File tmpFile = File.createTempFile("GSFileUtilWFA", ".tmp", parent); try { Writer out = new OutputStreamWriter(new FileOutputStream( tmpFile), encoding); out.write(content); out.flush(); out.close(); if (!tmpFile.renameTo(file)) { throw new IOException("Failed to rename " + tmpFile + " to " + file); } } finally { deleteTempFile(tmpFile); } } /** * Delete a temporary file. If the file does not exist, we assume it has * aready been cleaned up and succeed quietly. Warns but does not throw an * exception if deletion fails. This method should not be called on a * directory. * * Use this method rather than just calling File.delete because it will log * a warning, and may in the future take other measures to delete the file * if it can't immediately. */ public static void deleteTempFile(File tmpFile) { if (!tmpFile.exists()) { return; } if (!tmpFile.delete()) { logger.warn("Failed to delete temporary file " + tmpFile + "; something is probably holding it open"); } } }