All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.jetty.toolchain.test.IO Maven / Gradle / Ivy

There is a newer version: 6.3
Show newest version
//
//  ========================================================================
//  Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
//  ------------------------------------------------------------------------
//  All rights reserved. This program and the accompanying materials
//  are made available under the terms of the Eclipse Public License v1.0
//  and Apache License v2.0 which accompanies this distribution.
//
//      The Eclipse Public License is available at
//      http://www.eclipse.org/legal/epl-v10.html
//
//      The Apache License v2.0 is available at
//      http://www.opensource.org/licenses/apache2.0.php
//
//  You may elect to redistribute this code under either of these licenses.
//  ========================================================================
//

package org.eclipse.jetty.toolchain.test;

import java.io.Closeable;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;

/**
 * IO Utilities.
 */
public final class IO
{
    @SuppressWarnings("javadoc")
    public static final int BUFFER_SIZE = 64 * 1024;

    private IO()
    {
        /* prevent instantiation */
    }

    /**
     * Copy Reader to Writer out until EOF or exception.
     * 
     * @param in
     *            the Reader to read from
     * @param out
     *            the Writer to write to
     * @throws IOException
     *             if unable to copy the contents
     */
    public static void copy(Reader in, Writer out) throws IOException
    {
        char buffer[] = new char[BUFFER_SIZE];
        int len = BUFFER_SIZE;

        while (true)
        {
            len = in.read(buffer,0,BUFFER_SIZE);
            if (len == -1)
            {
                break;
            }
            out.write(buffer,0,len);
        }
    }

    /**
     * Read the contents of a file into a String and return it.
     * 
     * @param file
     *            the file to read.
     * @return the contents of the file.
     * @throws IOException
     *             if unable to read the file.
     */
    public static String readToString(File file) throws IOException
    {
        FileReader reader = null;
        try
        {
            reader = new FileReader(file);
            StringWriter writer = new StringWriter();
            copy(reader,writer);
            return writer.toString();
        }
        finally
        {
            close(reader);
        }
    }

    /**
     * closes an {@link Closeable}, and silently ignores exceptions
     * 
     * @param c
     *            the closeable to close
     */
    public static void close(Closeable c)
    {
        if (c == null)
        {
            return;
        }

        try
        {
            c.close();
        }
        catch (IOException ignore)
        {
            /* ignore */
        }
    }

    /**
     * Copy files or directories.
     * 
     * @param from
     *            the from path
     * @param to
     *            the destination path
     * @throws IOException
     *             if unable to copy the file
     */
    public static void copy(File from, File to) throws IOException
    {
        if (from.isDirectory())
        {
            copyDir(from,to);
        }
        else
        {
            copyFile(from,to);
        }
    }

    /**
     * Copy the contents of a directory from one directory to another.
     * 
     * @param from
     *            the from directory
     * @param to
     *            the destination directory
     * @throws IOException
     *             if unable to copy the file
     */
    public static void copyDir(File from, File to) throws IOException
    {
        FS.ensureDirExists(to);

        for (File file : from.listFiles(IO.SafeFileFilter.INSTANCE))
        {
            copy(file,new File(to,file.getName()));
        }
    }

    /**
     * A {@link FileFilter} for obtaining a list of contents that does not contain the special
     * . and .. entries that some JVM environments report.
     */
    public static class SafeFileFilter implements FileFilter
    {
        @SuppressWarnings("javadoc")
        public static final SafeFileFilter INSTANCE = new SafeFileFilter();

        public boolean accept(File path)
        {
            String name = path.getName();
            if (".".equals(name) || "..".equals(name))
            {
                return false; // old school.
            }
            return (path.isFile() || path.isDirectory());
        }
    }

    /**
     * Copy the entire {@link InputStream} to the {@link OutputStream}
     * 
     * @param in
     *            the input stream to read from
     * @param out
     *            the output stream to write to
     * @throws IOException
     *             if unable to copy the stream
     */
    public static void copy(InputStream in, OutputStream out) throws IOException
    {
        byte buffer[] = new byte[BUFFER_SIZE];
        int len = BUFFER_SIZE;

        while (true)
        {
            len = in.read(buffer,0,BUFFER_SIZE);
            if (len < 0)
            {
                break;
            }
            out.write(buffer,0,len);
        }
    }

    /**
     * Copy a file from one place to another
     * 
     * @param from
     *            the file to copy
     * @param to
     *            the destination file to create
     * @throws IOException if unable to copy the file
     */
    public static void copyFile(File from, File to) throws IOException
    {
        FileInputStream in = null;
        FileOutputStream out = null;
        try
        {
            in = new FileInputStream(from);
            out = new FileOutputStream(to);
            copy(in,out);
        }
        finally
        {
            close(out);
            close(in);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy