一定要注意:
传入的参数,应该是包含文件名的完整路径名,不能把一个文件复制到【文件夹】中,因为【文件夹】本身是不能有输入输出流的,只能复制到一个【文件】中,否则会报异常。
以字节流读写的三种方式
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; } }}
来源:https://www.cnblogs.com/baiqiantao/p/5587607.html