JAVA常用IO操作(转)

来源:互联网 发布:俯卧撑支架 知乎 编辑:程序博客网 时间:2024/05/17 06:01

package com.syj.util;

import java.io.BufferedReader;   

 

import java.io.BufferedWriter;   

 

import java.io.ByteArrayInputStream;   

 

import java.io.ByteArrayOutputStream;   

 

import java.io.File;   

 

import java.io.FileInputStream;   

 

import java.io.FileOutputStream;   

 

import java.io.FileReader;   

 

import java.io.FileWriter;   

 

import java.io.IOException;   

 

import java.io.InputStream;   

 

import java.io.InputStreamReader;   

 

import java.io.ObjectInputStream;   

 

import java.io.ObjectOutputStream;   

 

import java.io.OutputStream;   

 

import java.io.PrintWriter;   

 

import java.io.StringReader;   

 

import java.util.Arrays;   

 

 

 

/**  

 

 * <p>  

 

 * Title:IO工具类  

 

 * </p>  

 

 *   

 

 * <p>  

 

 * Description:常用的IO操作封装  

 

 * </p>  

 

 *   

 

 * <p>  

 

 * Copyright: 转载请注明出处http://blog.csdn.net/sunyujia/  

 

 * </p>  

 

 *   

 

 * @author 孙钰佳  

 

 * @main sunyujia@yahoo.cn  

 

 * @date Jun 15, 2008 4:37:58 PM  

 

 */  

 

public class IOUtil {   

 

    /**  

 

     * 缓冲区大小 1MB  

 

     */  

 

    private static final int BUFFER_SIZE = 1024 * 1024;   

 

 

 

    /**  

 

     *   

 

     * Description: 将输入流输出到输出流  

 

     *   

 

     * @param in  

 

     *            输入流  

 

     * @param out  

 

     *            输出流  

 

     * @param bufferSize  

 

     *            缓冲区大小  

 

     * @throws IOException  

 

     * @mail sunyujia@yahoo.cn  

 

     * @since:Jun 15, 2008 5:57:24 PM  

 

     */  

 

    public static void in2OutStream(InputStream in, OutputStream out,   

 

            int bufferSize) throws IOException {   

 

        byte[] buffer = new byte[bufferSize];// 缓冲区   

 

        for (int bytesRead = 0; (bytesRead = in.read(buffer)) != -1;) {   

 

            out.write(buffer, 0, bytesRead);   

 

            Arrays.fill(buffer, (byte) 0);   

 

        }   

 

    }   

 

 

 

    /**  

 

     *   

 

     * Description: 读取文件返回字节数组流  

 

     *   

 

     * @param file  

 

     *            文件  

 

     * @return 字节数组流  

 

     * @mail sunyujia@yahoo.cn  

 

     * @since:Jun 15, 2008 4:52:41 PM  

 

     */  

 

    public static ByteArrayOutputStream readFileToByteStream(File file)   

 

            throws IOException {   

 

        FileInputStream fis = null;   

 

        ByteArrayOutputStream bos = null;   

 

        try {   

 

            fis = new FileInputStream(file);   

 

            bos = new ByteArrayOutputStream();   

 

            in2OutStream(fis, bos, BUFFER_SIZE);   

 

        } finally {   

 

            if (fis != null)   

 

                fis.close();   

 

        }   

 

        return bos;   

 

    }   

 

 

 

    /**  

 

     *   

 

     * Description:读取文件返回字节数组  

 

     *   

 

     * @param file  

 

     *            文件  

 

     * @return 字节数组  

 

     * @throws IOException  

 

     * @mail sunyujia@yahoo.cn  

 

     * @since:Jun 15, 2008 5:38:50 PM  

 

     */  

 

    public static byte[] readFileToByteArray(File file) throws IOException {   

 

        ByteArrayOutputStream bos = null;   

 

        try {   

 

            bos = readFileToByteStream(file);   

 

        } finally {   

 

            if (bos != null)   

 

                bos.close();   

 

        }   

 

        return bos.toByteArray();   

 

    }   

 

 

 

    /**  

 

     *   

 

     * Description:读取文件内容  

 

     *   

 

     * @param file  

 

     *            文件  

 

     * @return String内容  

 

     * @throws IOException  

 

     * @mail sunyujia@yahoo.cn  

 

     * @since:Jun 15, 2008 5:46:32 PM  

 

     */  

 

    public static String readFileToString(File file) throws IOException {   

 

        StringBuffer sb = null;   

 

        BufferedReader in = null;   

 

        try {   

 

            in = new BufferedReader(new FileReader(file));   

 

            sb = new StringBuffer();   

 

            for (String line; (line = in.readLine()) != null;) {   

 

                sb.append(line + "/r/n");   

 

            }   

 

        } finally {   

 

            if (in != null)   

 

                in.close();   

 

        }   

 

        return sb.toString();   

 

    }   

 

 

 

    /**  

 

     *   

 

     * Description:复制文件  

 

     *   

 

     * @param src  

 

     *            源文件  

 

     * @param dest  

 

     *            目标文件  

 

     * @param cover  

 

     *            是否覆盖  

 

     * @throws IOException  

 

     * @mail sunyujia@yahoo.cn  

 

     * @since:Jun 15, 2008 6:08:28 PM  

 

     */  

 

    public static void copyFile(File src, File dest, boolean cover)   

 

            throws IOException {   

 

        FileInputStream in = null;   

 

        FileOutputStream out = null;   

 

        try {   

 

            if (!dest.exists()) {   

 

                dest.createNewFile();   

 

            } else if (dest.exists() && cover) {   

 

                dest.delete();   

 

                dest.createNewFile();   

 

            } else {   

 

                return;   

 

            }   

 

            in = new FileInputStream(src);   

 

            out = new FileOutputStream(dest);   

 

            in2OutStream(in, out, BUFFER_SIZE);   

 

        } finally {   

 

            try {   

 

                if (in != null)   

 

                    in.close();   

 

            } finally {   

 

                if (out != null)   

 

                    out.close();   

 

            }   

 

        }   

 

    }   

 

 

 

    /**  

 

     *   

 

     * Description:写文件  

 

     *   

 

     * @param file  

 

     *            文件  

 

     * @param str  

 

     *            内容  

 

     * @throws IOException  

 

     * @mail sunyujia@yahoo.cn  

 

     * @since:Jun 15, 2008 6:17:24 PM  

 

     */  

 

    public static void writeFile(File file, String str) throws IOException {   

 

        PrintWriter out = null;   

 

        BufferedReader in = null;   

 

        try {   

 

            if (!file.exists())   

 

                file.createNewFile();   

 

            in = new BufferedReader(new StringReader(str));   

 

            out = new PrintWriter(new BufferedWriter(new FileWriter(file)));   

 

            for (String line; (line = in.readLine()) != null;) {   

 

                out.println(line);   

 

            }   

 

        } finally {   

 

            try {   

 

                if (in != null)   

 

                    in.close();   

 

            } finally {   

 

                if (out != null)   

 

                    out.close();   

 

            }   

 

        }   

 

    }   

 

 

 

    /**  

 

     *   

 

     * Description:从控制台读取一串字符串  

 

     *   

 

     * @return 读取的字符串  

 

     * @throws IOException  

 

     * @mail sunyujia@yahoo.cn  

 

     * @since:Jun 15, 2008 6:42:29 PM  

 

     */  

 

    public static String readStringFromSystemIn() throws IOException {   

 

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   

 

        try {   

 

            return br.readLine();   

 

        } finally {   

 

            if (br != null)   

 

                br.close();   

 

        }   

 

    }   

 

 

 

    /**  

 

     *   

 

     * Description:当ObjectInputStream对象调用  

 

     * readObject();时,会从ByteArrayInputStream流中反序列化出的对象  

 

     *   

 

     *   

 

     * @param bi  

 

     * @return  

 

     * @throws IOException  

 

     * @mail sunyujia@yahoo.cn  

 

     * @since:Jun 15, 2008 7:07:53 PM  

 

     */  

 

    public static ObjectInputStream buildObjectInputStream(   

 

            ByteArrayInputStream bi) throws IOException {   

 

        return new ObjectInputStream(bi);   

 

    }   

 

 

 

    /**  

 

     *   

 

     * Description:当ObjectOutputStream对象调用  

 

     * writeObject(o);时,o对象会序列化到ByteArrayOutputStream流中去  

 

     *   

 

     * @param bos  

 

     *            字节数组流  

 

     * @return 对象输出流  

 

     * @throws IOException  

 

     * @mail sunyujia@yahoo.cn  

 

     * @since:Jun 15, 2008 7:06:00 PM  

 

     */  

 

    public static ObjectOutputStream buildObjectOutputStream(   

 

            ByteArrayOutputStream bos) throws IOException {   

 

        return new ObjectOutputStream(bos);   

 

    }   

 

 

 

    public static BufferedReader buildBufferedReader(String str) {   

 

        return new BufferedReader(new StringReader(str));   

 

    }   

 

 

 

    public static ByteArrayInputStream buildByteArrayInputStream(String str) {   

 

        return new ByteArrayInputStream(str.getBytes());   

 

    }   

 

 

 

    public static ByteArrayInputStream buildByteArrayInputStream(byte[] bt) {   

 

        return new ByteArrayInputStream(bt);   

 

    }   

 

 

 

    public static void main(String[] args) throws Exception {   

 

        byte[] bootFileBytes = IOUtil.readFileToByteArray(new File(   

 

                "C://boot.ini"));   

 

        System.out.println(new String(bootFileBytes));   

 

        String bootFileStr = readFileToString(new File("C://boot.ini"));   

 

        System.out.println(bootFileStr);   

 

        System.out.println(new String(bootFileBytes).equals(bootFileStr));   

 

        IOUtil.copyFile(new File("C://boot.ini"), new File("C://boot1.ini"),   

 

                true);   

 

        IOUtil.writeFile(new File("C://boot2.ini"), bootFileStr);   

 

        ByteArrayOutputStream bos = new ByteArrayOutputStream();   

 

        ObjectOutputStream oos = IOUtil.buildObjectOutputStream(bos);   

 

        oos.writeObject(new String("abcd"));   

 

        ObjectInputStream ois = IOUtil.buildObjectInputStream(IOUtil   

 

                .buildByteArrayInputStream(bos.toByteArray()));   

 

        System.out.println(ois.readObject());   

 

        System.out.println(IOUtil.readStringFromSystemIn());   

 

    }