com.axelor.apps.tool.file.FileTool.java Source code

Java tutorial

Introduction

Here is the source code for com.axelor.apps.tool.file.FileTool.java

Source

/**
 * Axelor Business Solutions
 *
 * Copyright (C) 2016 Axelor (<http://axelor.com>).
 *
 * This program is free software: you can redistribute it and/or  modify
 * it under the terms of the GNU Affero General Public License, version 3,
 * as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.axelor.apps.tool.file;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public final class FileTool {

    private static final Logger LOG = LoggerFactory.getLogger(FileTool.class);

    private FileTool() {

    }

    /**
     * Mthode permettant de lire le contenu d'un fichier
     * 
     * @param fileName
     *          Le nom du fichier
     * @return
     *          Une liste contenant l'ensemble des lignes
     * @throws IOException 
     * @throws AxelorException 
     */
    public static List<String> reader(String fileName) throws IOException {

        List<String> content = new ArrayList<String>();
        BufferedReader br = new BufferedReader(new FileReader(new File(fileName)));
        String ligne = "";

        while ((ligne = br.readLine()) != null) {
            content.add(ligne);
        }

        br.close();

        return content;
    }

    /**
     * Mthode permettant d'crire une ligne dans un fichier
     * @param destinationFolder
     *             Le chemin du fichier
     * @param fileName
     *             Le nom du fichier
     * @param line
     *             La ligne  crire
     * @throws IOException
     */
    public static void writer(String destinationFolder, String fileName, String line) throws IOException {
        System.setProperty("line.separator", "\r\n");
        FileWriter writer = null;

        try {

            File file = create(destinationFolder, fileName);
            writer = new FileWriter(file);
            writer.write(line);

        } catch (IOException ex) {

            LOG.error(ex.getMessage());
        } finally {

            if (writer != null) {
                writer.close();
            }

        }
    }

    /**
     * Mthode permettant d'crire plusieurs lignes dans un fichier
     * @param destinationFolder
     *             Le chemin du fichier
     * @param fileName
     *             Le nom du fichier
     * @param line
     *             La liste de ligne  crire
     * @throws IOException
     */
    public static void writer(String destinationFolder, String fileName, List<String> multiLine)
            throws IOException {
        System.setProperty("line.separator", "\r\n");
        BufferedWriter output = null;
        try {

            File file = create(destinationFolder, fileName);
            output = new BufferedWriter(new FileWriter(file));
            int i = 0;

            for (String line : multiLine) {

                output.write(line);
                output.newLine();
                i++;
                if (i % 50 == 0) {
                    output.flush();
                }

            }

        } catch (IOException ex) {

            LOG.error(ex.getMessage());

        } finally {

            if (output != null) {
                output.close();
            }
        }
    }

    /**
     * Cration d'un fichier avec son chemin si il n'existe pas
     * 
     * @param fileName
     * @return
     * @throws IOException
     */
    public static File create(String fileName) throws IOException {

        String[] filePath = fileName.split(System.getProperty("file.separator"));
        String name = filePath[filePath.length - 1];
        return create(fileName.replace(name, ""), name);
    }

    /**
     * Cration d'un fichier avec son chemin si il n'existe pas
     * 
     * @param destinationFolder
     * @param fileName
     * @return
     * @throws IOException
     */
    public static File create(String destinationFolder, String fileName) throws IOException {

        File folder = new File(destinationFolder);
        if (!folder.exists()) {
            folder.mkdirs();
        }

        return new File(folder, fileName);
    }

    /**
     * Mthode permettant de copier le fichier vers une destination
     * 
     * @param fileSrc
     *          Le chemin du fichier source
     * @param fileDest
     *          Le chemin du fichier destination
     * @throws IOException 
     * @throws FileNotFoundException 
     * @throws AxelorException 
     */
    public static void copy(String fileSrc, String fileDest) throws IOException {

        IOUtils.copy(new FileInputStream(fileSrc), new FileOutputStream(fileDest));

    }

    /**
     * Copy all files and directories from a Folder to a destination Folder.
     * Must be called like: listAllFilesInFolder(srcFolderPath, "", srcFolderPath,
     * destFolderPath)
     * 
     * @param currentFolder Used for the recursive called.
     * @param relatedPath Used for the recursive called.
     * @param sourceFolder Source directory.
     * @param destinationFolder Destination directory.
     * @param logger A logger.
     * @throws IOException 
     */
    public static void copyFolderToFolder(String sourceFolder, String destinationFolder) throws IOException {

        // Current Directory.
        File current = new File(sourceFolder);
        File destFile = new File(destinationFolder);

        if (!destFile.exists()) {
            destFile.mkdir();
        }

        if (current.isDirectory()) {

            // List all files and folder in the current directory.
            File[] list = current.listFiles();
            if (list != null) {
                // Read the files list.
                for (int i = 0; i < list.length; i++) {
                    // Create current source File
                    File tf = new File(sourceFolder + "/" + list[i].getName());
                    // Create current destination File
                    File pf = new File(destinationFolder + "/" + list[i].getName());
                    if (tf.isDirectory() && !pf.exists()) {
                        // If the file is a directory and does not exit in the
                        // destination Folder.
                        // Create the directory.
                        pf.mkdir();
                        copyFolderToFolder(tf.getAbsolutePath(), pf.getAbsolutePath());
                    } else if (tf.isDirectory() && pf.exists()) {
                        // If the file is a directory and exits in the
                        // destination Folder.
                        copyFolderToFolder(tf.getAbsolutePath(), pf.getAbsolutePath());
                    } else if (tf.isFile()) {
                        // If it is a file.
                        copy(sourceFolder + "/" + list[i].getName(), destinationFolder + "/" + list[i].getName());
                    } else {
                        // Other cases.
                        LOG.error("Error : Copy folder");
                    }
                }
            }
        }
    }

}