IO-文件 File 复制 读写 总结

自作多情 提交于 2020-02-28 05:34:46
一定要注意:
传入的参数,应该是包含文件名的完整路径名,不能把一个文件复制到【文件夹】中,因为【文件夹】本身是不能有输入输出流的,只能复制到一个【文件】中,否则会报异常。

以字节流读写的三种方式
public class Test {    private static final String FILE_PATH = "e:\\";    private static final String FILE_TYPE = ".exe";    private static final String FILE_FROM = FILE_PATH + 0 + FILE_TYPE;    private static final String COPY_FILE_1 = FILE_PATH + 1 + FILE_TYPE;    private static final String COPY_FILE_2 = FILE_PATH + 2 + FILE_TYPE;    private static final String COPY_FILE_3 = FILE_PATH + 3 + FILE_TYPE;    public static void main(String[] args) throws IOException {        copyByBufStream(FILE_FROM, COPY_FILE_1);        copyByBufArray(FILE_FROM, COPY_FILE_2);        copyByByte(FILE_FROM, COPY_FILE_3);    }    /**     * 利用缓冲输入流读取到一个缓冲容器后再写入。建议使用     */    public static boolean copyByBufStream(String filePathFrom, String filePathTo) {        try {            BufferedInputStream bufis = new BufferedInputStream(new FileInputStream(filePathFrom));            BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream(filePathTo));            int ch = 0;            while ((ch = bufis.read()) != -1) {                bufos.write(ch);            }            bufos.close();            bufis.close();            return true;        } catch (FileNotFoundException e) {            e.printStackTrace();            return false;        } catch (IOException e) {            e.printStackTrace();            return false;        }    }    /**     * 每次读取一个指定长度数组的字节。建议使用     */    public static boolean copyByBufArray(String filePathFrom, String filePathTo) {        try {            FileInputStream fis = new FileInputStream(filePathFrom);            FileOutputStream fos = new FileOutputStream(filePathTo);            byte[] buf = new byte[1024];            int len = 0;            while ((len = fis.read(buf)) != -1) {                fos.write(buf, 0, len);            }            fos.close();            fis.close();            return true;        } catch (FileNotFoundException e) {            e.printStackTrace();            return false;        } catch (IOException e) {            e.printStackTrace();            return false;        }    }    /**     * 一次读取一个字节。千万不要用,速度超级慢!     */    public static boolean copyByByte(String filePathFrom, String filePathTo) {        try {            FileInputStream fis = new FileInputStream(filePathFrom);            FileOutputStream fos = new FileOutputStream(filePathTo);            int ch = 0;            while ((ch = fis.read()) != -1) {                fos.write(ch);            }            fos.close();            fis.close();            return true;        } catch (FileNotFoundException e) {            e.printStackTrace();            return false;        } catch (IOException e) {            e.printStackTrace();            return false;        }    }}

以字符流读写的三种方式
public class Test {    private static final String FILE_PATH = "e:\\";    private static final String FILE_TYPE = ".txt";    private static final String FILE_FROM = FILE_PATH + 0 + FILE_TYPE;    private static final String COPY_FILE_1 = FILE_PATH + 1 + FILE_TYPE;    private static final String COPY_FILE_2 = FILE_PATH + 2 + FILE_TYPE;    private static final String COPY_FILE_3 = FILE_PATH + 3 + FILE_TYPE;    public static void main(String[] args) throws IOException {        //注意,只能复制纯文本格式的文件,否则就会出现乱码        copyByBufLine(FILE_FROM, COPY_FILE_1);        copyByBufArray(FILE_FROM, COPY_FILE_2);        copyByChar(FILE_FROM, COPY_FILE_3);    }    /**     * 一次写入一行字符     */    public static boolean copyByBufLine(String filePathFrom, String filePathTo) {        try {            BufferedReader bufr = new BufferedReader(new FileReader(filePathFrom));            BufferedWriter bufw = new BufferedWriter(new FileWriter(filePathTo));            String line = null;            //另外开辟一个缓冲区,存储读取的一行数据,返回包含该行内容的字符串,不包含换行符,如果已到达流末尾,则返回【 null】            while ((line = bufr.readLine()) != null) {                bufw.write(line);                bufw.newLine();// 写入一个行分隔符                bufw.flush();            }            bufr.close();            bufw.close();            return true;        } catch (FileNotFoundException e) {            e.printStackTrace();            return false;        } catch (IOException e) {            e.printStackTrace();            return false;        }    }    /**     * 一次写入指定个数的字符     */    public static boolean copyByBufArray(String filePathFrom, String filePathTo) {        try {            BufferedReader bufr = new BufferedReader(new FileReader(filePathFrom));            BufferedWriter bufw = new BufferedWriter(new FileWriter(filePathTo));            char[] buf = new char[1024];            int len = 0;            while ((len = bufr.read(buf)) != -1) {                bufw.write(buf, 0, len);                bufw.flush();                len = 0;            }            bufr.close();            bufw.close();            return true;        } catch (FileNotFoundException e) {            e.printStackTrace();            return false;        } catch (IOException e) {            e.printStackTrace();            return false;        }    }    /**     * 一次写入一个字符     */    public static boolean copyByChar(String filePathFrom, String filePathTo) {        try {            BufferedReader bufr = new BufferedReader(new FileReader(filePathFrom));            BufferedWriter bufw = new BufferedWriter(new FileWriter(filePathTo));            int ch = 0;            while ((ch = bufr.read()) != -1) {                bufw.write(ch);//写入单个字符            }            bufr.close();            bufw.close();            return true;        } catch (FileNotFoundException e) {            e.printStackTrace();            return false;        } catch (IOException e) {            e.printStackTrace();            return false;        }    }}





标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!