/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.lib.cvsclient.file; import org.netbeans.lib.cvsclient.JavaCvsSrcBundle; import org.jetbrains.annotations.NonNls; import java.io.*; import java.util.StringTokenizer; /** * A utility class for file based operations. * * @author Thomas Singer */ public final class FileUtils { @NonNls private static final String U_PREFIX = "u="; /** * Copies the specified sourceFile to the specified targetFile. */ public static void copyFile(File sourceFile, File targetFile) throws IOException { if (sourceFile == null || targetFile == null) { throw new NullPointerException("sourceFile and targetFile must not be null"); // NOI18N } // ensure existing parent directories final File directory = targetFile.getParentFile(); if (!directory.exists() && !directory.mkdirs()) { throw new IOException(JavaCvsSrcBundle.message("could.not.create.directory.error.message", directory)); // NOI18N } InputStream inputStream = null; OutputStream outputStream = null; try { inputStream = new BufferedInputStream(new FileInputStream(sourceFile)); outputStream = new BufferedOutputStream(new FileOutputStream(targetFile)); final byte[] buffer = new byte[32768]; for (int readBytes = inputStream.read(buffer); readBytes > 0; readBytes = inputStream.read(buffer)) { outputStream.write(buffer, 0, readBytes); } } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException ex) { // ignore } } if (outputStream != null) { try { outputStream.close(); } catch (IOException ex) { // ignore } } } } public static String ensureLeadingSlash(String filePath) { if (filePath.startsWith("/")) { return filePath; } return '/' + filePath; } public static String removeLeadingSlash(String filePath) { if (filePath.startsWith("/")) { return filePath.substring(1); } return filePath; } public static String ensureTrailingSlash(String pathName) { if (pathName.endsWith("/")) { return pathName; } return pathName + '/'; } public static String removeTrailingSlash(String pathName) { if (pathName.endsWith("/")) { return pathName.substring(0, pathName.length() - 1); } return pathName; } public static boolean isReadOnlyMode(String mode) { for (StringTokenizer tokenizer = new StringTokenizer(mode, ","); tokenizer.hasMoreTokens();) { final String token = tokenizer.nextToken(); if (token.startsWith(U_PREFIX)) { return token.indexOf('w') < 0; } } return false; } public static String readLineFromFile(File file) throws IOException { BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(file)); return reader.readLine(); } finally { if (reader != null) { reader.close(); } } } public static void writeLine(File file, String line) throws IOException { BufferedWriter writer = null; try { writer = new BufferedWriter(new FileWriter(file)); writer.write(line); writer.newLine(); } finally { if (writer != null) { try { writer.close(); } catch (IOException ex) { // ignore } } } } /** * This utility class needs not to be instantiated anywhere. */ private FileUtils() { } }