java之文件输入输出流之文件的拷贝

1.简单文件写入数据操作
package com.feng;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class FileDemo1 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		/*
		 * FileOutPutStream:表示文件输入流,用渔网文件写内容
		 * 
		 * 构造方法
		 * FileOutPutStream(String name)
		 * FileOutPutStream(File file)
		 * 
		 * 方法
		 * write(int b);//每次写一个字节
		 */
		//1.创建文件输出流对象
		//FileOutputStream fos=new FileOutputStream(new File("b.txt"));
		//OutputStream otS=new FileOutputStream("a.txt");//多态写法
		FileOutputStream fos=new FileOutputStream("b.txt");
		
		//2.单个数据写入
//		fos.write(97);//a
//		fos.write(98);//b
//		fos.write(99);//c
		
		byte[] bytes= {97,98,99,100,101};//一次性写多个字节
		fos.write(bytes);
		
		//3.关闭流
		fos.close();
	}

}

2.一个字节一个字节的读取(速度慢)
package com.feng;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class picure {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//案例拷贝图片
		/*
		 * 
		 */
		//先创建输入流对象和输出流对象
		FileInputStream fis=new FileInputStream("C:\\Users\\Zhanglinfeng\\Desktop\\ma.png");	
		FileOutputStream fos=new FileOutputStream("C:\\Users\\Zhanglinfeng\\Desktop\\ma2.png");
		
		//2.通过输入流读取数据
		int b=0;
		while ((b=fis.read())!=-1) {
			//通过输出流写入图片数据
			fos.write(b);		
		}
		//4.关闭流
		fos.close();
		fis.close();
		System.out.println("图片拷贝成功!");
	}

}

3.一次性复制文件操作(当心内存溢出)
package com.feng;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class picture2 {
public static void main(String[] args) throws IOException {
	/*
	 * 不建议使用这种方法
	 * 字节数组拷贝之available()方法
	 */
	File file=new File("C:\\\\Users\\\\Zhanglinfeng\\\\Desktop\\\\ma.png");
	File file2=new File("C:\\\\Users\\\\Zhanglinfeng\\\\Desktop\\\\ma-副本.png");
	
	//1.文件输入流
	FileInputStream fis=new FileInputStream(file);
	int size=fis.available();//返回文件长度(字节为单位)
	System.out.println("size="+size);
	
	//2.现在一次读文件大小字节
	//2.1定义一个字节数组
	byte[] bytes=new byte[size];
	//2.2把数据读到字节数组中
	fis.read(bytes);//返回读取到的实际长度
	
	//3.把字节数组一次性写入文件
	FileOutputStream fos=new FileOutputStream(file2);
	fos.write(bytes);
	
	fis.close();
	fos.close();
	System.out.println("图片拷贝成功");	
}
}

4.最优拷贝(自定义读取长度)
package com.feng;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class picture3 {
	public static void main(String[] args) throws IOException {
		
		/*
		 * 选择读取的长度
		 */
	
	
		
		
		File file = new File("C:\\\\Users\\\\Zhanglinfeng\\\\Desktop\\\\ma.png");
		File file2 = new File("C:\\\\Users\\\\Zhanglinfeng\\\\Desktop\\\\ma-副本.png");
		//输入流
		FileInputStream fis = new FileInputStream(file);
		//输出流
		FileOutputStream fos = new FileOutputStream(file2);
		
		byte[] bytes=new byte[1024*8];//定义一个8KB的字节空数组
		
	
	   int len=0;
	   int count=0;
		while ((len=fis.read(bytes))!=-1) {
			fos.write(bytes, 0, len);//从零的位置读到最后一次读取的实际大小
			count++;
		}
		fis.close();
		fos.close();	
		System.out.println("文件读取次数"+count);
		System.out.println("图片拷贝成功!");
	}

}

java之文件输入输出流之文件的拷贝_第1张图片

你可能感兴趣的:(java)