JAVA:IO流非文本形式文件拷贝
说完了字节流的输入输出,我们来做一个小练习。首先我在d盘里创建一个jpg格式的图片,图片内容和名字可以任取。
我们知道,字节流可以通过字节实现输入输出,而且能够将文件转换为字节形式存储,所以应当用字节流的形式输入输出jpg格式文件。
一、创建读取流对象/输出流对象
//文件地址
String filePath0 = "d:\\Naxida.jpg";
String filePath1 = "d:\\Naxida2.jpg";
//创建读取流对象/输出流对象
//用到FileInputStream/FileOutputStream读取非文本形式文件
FileInputStream fileInputStream = new FileInputStream(filePath0);
FileOutputStream fileOutputStream = new FileOutputStream(filePath1);
二、输入/输出字节流
我们这次使用数组来读取文件,首先创建一个byte类型数组用来接受文件内容。
//创建byte类型数组
byte[] b = new byte[1000];
因为为jpg格式文件,一次读取肯定是不行的,哪怕我用的是数组来接收。所以我要创建一个while循环,还是老样子,新建一个int类型变量来接收数组长度。
int readLength = 0;
while((readLength = fileInputStream.read(b))!=-1) {fileOutputStream.write(b,0,readLength);
}
这里为什么要用write(b,0,readLength)的形式输出呢?因为如果我加入我读取的字节数是1001,我使用的是write(b)方法的话。此时读取完前1000个字节时,最后一个字节会被放在byte数组的第一个位置,而剩下999个字节存放的仍然是上一个数组存储的字节内容并不会发生改变。此时输出必然会发生错误。
三、关闭流,释放资源
//关闭流,释放资源
//判断输出/输入流不为空
if(fileInputStream != null) {fileInputStream.close();
}
if(fileOutputStream != null) {fileOutputStream.close();
}
这时打开d盘,我们会发现我们要拷贝的文件已经出现了。
好了,字节的输入输出流就说到这里。