Popular Posts
Enable SSL connection for Jsoup import org.jsoup.Connection; import org.jsoup.Jsoup; import javax.net.ssl.*; import java.io.IOException; import java.security.KeyManagement... javax.net.ssl.SSLHandshakeException: Connection closed by peer in Android 5.0 Lollipop Recently, there is a error occurs when access website via ssl connection like below although it worked fine several days ago. // Enable SSL... Tired of Hibernate? Try JDBI in your code JDBI Quick sample ICategoryDAO.java : create a data access interface (implement is not required) package com.prhythm.erotic.task.data....
Stats
FileFactory
package bruce.lib.io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;

/**
 * @author Bruce Tsai
 * 
 */
public final class FileFactory {

    /**
     * 建立目錄, 若父層目錄不存在一併建立
     * 
     * @param file
     *            目錄路徑
     */
    public static void createDirectory(String file) {
        createDirectory(new File(file));
    }

    /**
     * 建立目錄, 若父層目錄不存在一併建立
     * 
     * @param file
     *            目錄
     */
    public static void createDirectory(File file) {
        if (file.getParentFile() != null && !file.getParentFile().exists()) {
            createDirectory(file.getParentFile());
        }
        if (!file.exists())
            file.mkdir();
    }

    /**
     * 刪除檔案或目錄, 若刪除的為目錄, 一併刪除目錄下的所有檔案
     * 
     * @param file
     *            檔案或目錄
     */
    public static void delete(String file) {
        delete(new File(file));
    }

    /**
     * 刪除檔案或目錄, 若刪除的為目錄, 一併刪除目錄下的所有檔案
     * 
     * @param file
     *            檔案或目錄
     */
    public static void delete(File file) {
        if (file.exists()) {
            if (file.isDirectory()) {
                File[] files = file.listFiles();
                for (File f : files) {
                    FileFactory.delete(f);
                }
            }
            int limit = 10 * 1000; // 10秒
            long tick = System.currentTimeMillis();
            while (file.exists()) {
                // 指定時間內無法刪除時擲出例外
                if (file.delete() && System.currentTimeMillis() - tick > limit)
                    throw new RuntimeException();

            }
        }
    }

    /**
     * 複製檔案或目錄
     * 
     * @param sourceFile
     *            來源檔案或目錄
     * @param destFile
     *            目的目錄
     * @throws IOException
     */
    public static void copy(String sourceFile, String destFile) throws IOException {
        copy(new File(sourceFile), new File(destFile));
    }

    /**
     * 複製檔案或目錄
     * 
     * @param sourceFile
     *            來源檔案或目錄
     * @param destFile
     *            目的目錄
     * @throws IOException
     */
    public static void copy(File sourceFile, File destFile) throws IOException {
        if (sourceFile.isFile()) {
            sourceFile.setReadable(true);
            FileInputStream fis = new FileInputStream(sourceFile);
            FileOutputStream fos = new FileOutputStream(destFile);
            BufferedInputStream bis = new BufferedInputStream(fis);
            BufferedOutputStream bos = new BufferedOutputStream(fos);

            byte[] buffer = new byte[128];
            int readed = -1;
            while ((readed = bis.read(buffer)) > -1) {
                bos.write(buffer, 0, readed);
            }

            bos.close();
            fos.close();
            fis.close();
            fos.close();
        } else {
            destFile.mkdir();
            File[] files = sourceFile.listFiles();
            for (File f : files) {
                copy(f, new File(String.format("%s\\%s", destFile.getAbsolutePath(), f.getName())));
            }
        }
    }

    /**
     * 讀取檔案內的全部文字資料
     * 
     * @param file
     *            要讀取的檔案
     * @return
     * @throws IOException
     */
    public static String readAllText(File file) throws IOException {
        return new String(readAllBytes(file));
    }

    /**
     * 讀取檔案內的全部文字資料
     * 
     * @param file
     *            要讀取的檔案
     * @param encoding
     *            文字編碼
     * @return
     * @throws IOException
     */
    public static String readAllText(File file, String encoding) throws IOException {
        return new String(readAllBytes(file), encoding);
    }

    /**
     * 讀取檔案內的全部位元資料
     * 
     * @param file
     *            要讀取的檔案
     * @return
     * @throws IOException
     */
    public static byte[] readAllBytes(File file) throws IOException {
        FileInputStream fis = new FileInputStream(file);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int b = -1;
        while ((b = fis.read()) > -1) {
            baos.write(b);
        }
        baos.close();
        fis.close();
        return baos.toByteArray();
    }

    /**
     * 將內容寫入檔案. 寫入時呼叫 toString() 並將回傳值寫入檔案
     * 
     * @param file
     *            要寫入的檔案
     * @param content
     *            要寫入的內容
     * @throws IOException
     */
    public static void writeAllText(File file, Object content) throws IOException {
        FileWriter writer = new FileWriter(file);
        writer.write(content.toString());
        writer.close();
    }

    /**
     * 將內容寫入檔案. 寫入時呼叫 toString() 並將回傳值寫入檔案
     * 
     * @param file
     *            要寫入的檔案
     * @param content
     *            要寫入的內容
     * @param encoding
     *            文字編碼
     * @throws IOException
     */
    public static void writeAllText(File file, Object content, String encoding) throws IOException {
        FileOutputStream fos = new FileOutputStream(file);
        OutputStreamWriter writer = new OutputStreamWriter(fos, encoding);
        writer.write(content.toString());
        writer.close();
        fos.close();
    }

    /**
     * 將內容寫入檔案. 寫入時呼叫 toString() 並將回傳值寫入檔案, 若檔案存在, 將內容加入至檔案結尾, 檔案不存在時, 直接寫入
     * 
     * @param file
     *            要寫入的檔案
     * @param content
     *            要寫入的內容
     * @throws IOException
     */
    public static void appendAllText(File file, Object content) throws IOException {
        FileWriter writer = new FileWriter(file, true);
        writer.write(content.toString());
        writer.close();
    }

    /**
     * 將內容寫入檔案. 寫入時呼叫 toString() 並將回傳值寫入檔案, 若檔案存在, 將內容加入至檔案結尾, 檔案不存在時, 直接寫入
     * 
     * @param file
     *            要寫入的檔案
     * @param content
     *            要寫入的內容
     * @param encoding
     *            文字編碼
     * @throws IOException
     */
    public static void appendAllText(File file, Object content, String encoding) throws IOException {
        if (file.exists()) {
            appendAllText(file, content);
        } else {
            writeAllText(file, content, encoding);
        }
    }

    /**
     * 將內容寫入檔案
     * 
     * @param file
     *            要寫入的檔案
     * @param bytes
     *            要寫入的內容
     * @throws IOException
     */
    public static void writeAllBytes(File file, byte[] bytes) throws IOException {
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(bytes);
        fos.close();
    }

    /**
     * 將內容寫入檔案. 若檔案存在, 將內容加入至檔案結尾, 檔案不存在時, 直接寫入
     * 
     * @param f
     *            要寫入的檔案
     * @param bytes
     *            要寫入的內容
     * @throws IOException
     */
    public static void appendAllBytes(File f, byte[] bytes) throws IOException {
        FileOutputStream fos = new FileOutputStream(f, true);
        fos.write(bytes);
        fos.close();
    }
}