大家在Java开发中都会遇到文件复制的文件,众所周知,需要通过文件输入输出流实现。

那究竟该怎么做那,话不多说,直接上代码:

一,使用字节流复制文件

public class FileByteCopy {
public static void main(String[] args) {  

	FileByteCopy f= new FileByteCopy();  
        try {  
            f.copy("d:/File/1.txt","d:/CopyFile/1.txt");  

        } catch (Exception e) {  
            e.printStackTrace();  
        }  

    } 
    public void copy(String f1,String f2) throws Exception{ 
        FileInputStream fis = new FileInputStream(f1); //首先构建输入流的对象,指定需要读取的文件路径  
        FileOutputStream fos = new FileOutputStream(f2,false); //构建文件输出流的对象,即将文件复制在哪里去,后面的true代表每次写入时不清空当前文件内容  //方法一,单字节复制
//        int value = fis.read(); / //一个字节一个字节的读取文件的内容  
//        while(value!=-1){  
//            fos.write(value);  
//            fos.flush();  
//            value = fis.read();  
//        }  

//方法二  以字节数组为单位传递 (一次传递一个大小自定义的数组)
        byte [] bytes = new byte[1024]; 
        int len=fis.read(bytes); //把读取的字节存入到字节数组中  此时的len为文件中的大小,注意不一定是1024。下图中的95字节即为对应的源文件的len值

java 文件复制 字符串前的空格没有了 java怎么复制字符串_文件复制

while(len!=-1){ 
         // fos.write(bytes); //使用这种方法,如果源文件大小不是1024,,复制后的文件也会是1024。

因为一次读取的最小的都是1024,详细见下图。

java 文件复制 字符串前的空格没有了 java怎么复制字符串_文件复制_02

复制前

java 文件复制 字符串前的空格没有了 java怎么复制字符串_源文件_03

 

复制后

java 文件复制 字符串前的空格没有了 java怎么复制字符串_源文件_04

 

fos.write(bytes, 0, len); //从偏移量0开始到len(95)写入字符,可以保证源文件和复制后的文件大小一致。 
            fos.flush();  
            len=fis.read(bytes);  
        }  
        //读取完毕后关闭流  
        fis.close();  
        fos.close();  
    }  
}

二,使用字符流复制文件(与字节流同理)

public class FileCharCopy {
	public static void main(String[] args) {  
		FileCharCopy f = new FileCharCopy();  
        try {  
f.copy("d:/File/1.txt","d:/CopyFile/1.txt"); 

        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  

    public void copy(String f1,String f2) throws Exception{ 
        FileReader fr = new FileReader(f1); 
        FileWriter fw =new FileWriter(f2,false); 
//int value=fr.read(); 
//while(value!=-1){  
//fw.write(value);  
//fw.flush();  
//value=fr.read();  
//}
 char [] chars = new char[1024]; 
 int len =fr.read(chars); 
 while(len!=-1){  
 fw.write(chars, 0, len);  
 fw.flush();  
 len =fr.read(chars);  
 }  

 fr.close();  
 fw.close();  
    }