在某一个文件夹中我们通常是Ctrl+C&Ctrl+V复制一个文档或者图片是吧。简称CV战士。
那么我们来看一下怎么在Java中复制图片和文档呢?这里就要使用到I/O流中的字节流和字符流。
字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元。
package com.etime02;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/*
* 使用字节流复制图片
* 在java中有个比较重要的知识点就是I/O流(Input&Output)
* 在对文件操作时就需要用到I/O流,其中输入流就是把硬盘上的东西读取到内存中
* 而输出流就是把内存中的内容写入到硬盘。这里重点介绍字节流
* 在计算机中许多图片,音频,视频都是以字节(二进制)形式存在的,
* 我们想要获取数据就必须通过字节流来获取
* Java中有两个类FileInputStream和FileOutStream来向内存中读入数据和向硬盘写入到硬盘
* 使用字节流的步骤
* 首先打开流——>实现读写方法,实现复制——>关闭流
*/
public class PictureCopy {
public static void main(String[] args) {
// TODO Auto-generated method stub
FileInputStream fileInputStream=null;
FileOutputStream fileOutputStream=null;
try {
//首先打开流
fileInputStream=new FileInputStream("D:"+File.separator+"1.jpg");//源文件
fileOutputStream=new FileOutputStream("D:"+File.separator+"copy.jpg");//新文件
//使用read()和write()方法实现读入和写入
int i=0;
while((i=fileInputStream.read())!=-1){
fileOutputStream.write(i);
}
//一些异常的处理
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//使用完流之后记得要关闭流,释放相关资源
} finally {
if (fileInputStream!=null) {
try {
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (fileOutputStream!=null) {
try {
fileOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//显示的给流赋为空
fileInputStream=null;
fileOutputStream=null;
}
}
}
上面的案列是复制图片,下面我们使用字符流来复制文本。
package com.etime01;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class TextCopy {
public static void main(String[] args) {
// TODO Auto-generated method stub
//打开流
FileReader fileReader=null;
FileWriter fileWriter=null;
try {
fileReader=new FileReader("D://1.txt");
fileWriter=new FileWriter("D://copy.txt");
char[] buffer=new char[1024*1];
int len=0;
//使用write()和read()方法实现读入和写出
while((len=fileReader.read(buffer))!=-1){
fileWriter.write(buffer, 0, len);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//关闭流,释放相关资源
} finally {
if (fileReader!=null) {
try {
fileReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (fileWriter!=null) {
try {
fileWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
fileReader=null;
fileWriter=null;
}
}
}
上面案例分别使用字节流和字符流完成了图片的复制和文件的复制。不管是字节流还是字符流都有两种方法实现。以字节流为例
方法一:把字节一个一个的读入到内存,然后从内存中一个一个的写入到硬盘上。
方法二:把字节读入到内存存入到字节数组(相当于中转站),然后从内存中以字节串的形式写入到硬盘。