Java File Read by Charset copyFileWithEolConversion(File inFile, File outFile, Charset charset)

Here you can find the source of copyFileWithEolConversion(File inFile, File outFile, Charset charset)

Description

Copy file and create output directory if need.

License

Open Source License

Declaration

public static void copyFileWithEolConversion(File inFile, File outFile, Charset charset) throws IOException 

Method Source Code

//package com.java2s;
/**************************************************************************
 OmegaT - Computer Assisted Translation (CAT) tool 
  with fuzzy matching, translation memory, keyword search, 
  glossaries, and translation leveraging into updated projects.
    //from  www.jav  a2s  . c o  m
 Copyright (C) 2008 Alex Buloichik
       2009 Didier Briel
       2012 Alex Buloichik, Didier Briel
       2014 Alex Buloichik, Aaron Madlon-Kay
       2015-2016 Aaron Madlon-Kay
       Home page: http://www.omegat.org/
       Support center: http://groups.yahoo.com/group/OmegaT/
    
 This file is part of OmegaT.
    
 OmegaT is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.
    
 OmegaT 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 General Public License for more details.
    
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 **************************************************************************/

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;

import java.io.IOException;
import java.nio.charset.Charset;

import java.nio.file.Files;

public class Main {
    /**
     * Copy file and create output directory if need. EOL will be converted into target-specific or into
     * platform-specific if target doesn't exist.
     */
    public static void copyFileWithEolConversion(File inFile, File outFile, Charset charset) throws IOException {
        File dir = outFile.getParentFile();
        if (!dir.exists()) {
            dir.mkdirs();
        }
        String eol;
        if (outFile.exists()) {
            // file exist - read EOL from file
            eol = getEOL(outFile, charset);
        } else {
            // file not exist - use system-dependent
            eol = System.lineSeparator();
        }
        try (BufferedReader in = Files.newBufferedReader(inFile.toPath(), charset)) {
            try (BufferedWriter out = Files.newBufferedWriter(outFile.toPath(), charset)) {
                String s;
                while ((s = in.readLine()) != null) {
                    // copy using known EOL
                    out.write(s);
                    out.write(eol);
                }
            }
        }
    }

    public static String getEOL(File file, Charset charset) throws IOException {
        String r = null;
        try (BufferedReader in = Files.newBufferedReader(file.toPath(), charset)) {
            while (true) {
                int ch = in.read();
                if (ch < 0) {
                    break;
                }
                if (ch == '\n' || ch == '\r') {
                    r = Character.toString((char) ch);
                    int ch2 = in.read();
                    if (ch2 == '\n' || ch2 == '\r') {
                        r += Character.toString((char) ch2);
                    }
                    break;
                }
            }
        }
        return r;
    }
}

Related

  1. bomStream(String charset, String file)
  2. detectCharset(File f, String[] charsets)
  3. doTranseFileCharset(File srcFile, File destFile, String srcCharsetName, String destCharsetName)
  4. fileContent(File file, Charset charset)
  5. fileToString(final File f, final Charset c)