关于JavaIO流的图片读取
自我介绍一下
大家好,新的一年,新的一个学期…我是一个大二的学生,我姓林。最近Java刚刚学到IO流这一板块知识。在此,发表一下关于IO流的图片读取总结的心得还有思路…
简单介绍一下IO板块中有输出流还有输入流,后面还有缓冲流等等 ,现在简单介绍输出流还有输入流
在Java的IO这一板块中,有输入流InPutStream(当然,这是输入流的父类也是抽象类)它的子类是FileInPutStream。也有输出流OutPutStream,这也是输出流的抽象父类,其的子类是FileOutPutStream…当然在这提醒一句话就是抽象类不可以new对象,也不可以有构造方法…
-
在此总结一下输入流父类InPutStream的共有方法:
–public void close();这个方法的作用就是:关闭流释放系统资源
–public abstract int read();这个方法的作用就是在输入流的文件目的地关联路径中读取一个字节数据(提醒一句:如果文件的关联路径读取的字节到结尾了就会返回-1值)
–public int read(byte[] b):这个方法的作用就是传入的是一个数组,然后到在文件的关联目的地中把读取的字节个数传入到这个数组中 -
输入流InPutStream子类的构造方法:
–FileInPutStream(String name);该方法的作用是:传入一个字符串类型的文件路径
–FileInPutStream(File file):该方法的作用就是:传入一个File类型的文件路径进去
注意:如果在创建输入流FileInPutStream对象的时候,如果没有该文件的路径idea就会报
FileNotFoundException错误!这个错误的意思就是文件找不到异常错误…因为输入流不会自己去创建文件路径哟!…切记切记!
- 输出流OutPutStream父类的共有方法:
–public void close():这方法的作用跟输入流InPutStream相同,关闭流释放系统资源
–public abstract void write(int b):该方法的作用就是,一次只能写一个字节数据进去
–public void write(byte[] b):该方法的作用就是:创建一个数组写入多个数据,然后将写好的数组放进这个方法中,一次可以写出b.length个字节数据(注意:还可以写字符串哟!调用String类的getbyte方法转换成字符串)
–public void write(byte[] b,int off,int len):该方法的作用就是:把写好的数组传进去,可以根据从文件字节的位置从0到len个字节进行读取…
注意:当完成流的操作时,必须调用close此方法,关闭流释放系统资源…
- 输出流 OutputStream的子类:FileOutputStream类的构造方法:
– public FileOutputStream(String name):传入一个字符串类型的文件路径
– public FileOutputStream(File file):传入一个File类型的文件路径
– public FileOutputStream(String name,boolean append):创建文件指定路径,类型为String类型的文件路径
–public FileOutputStream(File file,boolean append):创建文件指定路径,类型为File类型
注意boolean可以填写true\false 如果为true表示在原来写入的文件基础上拼接一个字节数据 如果是false就覆盖之前文件写入的字节数据…切记切记!!
来一个小总结:
1.IO有按流向分的话:有输入流还有输出流
2.如果输入流写入文件指定路径的时候,没有那个文件的话就会报FileNottFoundException错误!
3.输出流如果没有创建该文件路径的话,其会自行创建,其跟输入流不同!
正题:如何使用输入流输出流复制文件图片呢?(把一个文件图片从该路径赋值到另外一个文件路径)
-我就直接上图了,这是我写的代码跟思路如下(有点小辣椒哈哈哈):
public class MyTest01{
public static void main(String[] args)throws Exception{
//案例1:图片复制
//第一步:创建输入流对象
FileInPutStream fis = new FileInPutStream("day10\\csdn\\jp.png");
//第二步:创建输出流对象
FileOutPutStream fos = new FileOutPutStream("day10\\eee\\jp02.png");
//第三步:定义一个变量len,再使用while循环
int len;
//这一步的语义就是:去读取的文件路径中读取到的数据个数交给变量len
//然后变量len就会拿去跟-1比较,不满足条件就是直接把这些读取到的字节个数
//写出指定的文件夹路径中...
//为什么要跟-1比较呢?因为刚才在上面说过了,如果文件路径中的字节数据读到
//结尾的时候就会返回-1 也就是读完了字节。所有要跟-1比较
while((len = fis.read) != -1){
//将文件读取的字节写出指定的文件路径中
fos.write(len);
}
//第四步:关闭流释放系统资源
fos.close();
fis.close();
}
}
以上是案例1:将一张图片复制到另外一个文件路径中
public class MyTest02{
public static void main(String[] args)throws Exception{
//案例2:使用数组一次拷贝文件
//1.创建输出流对象
FileInPutStream fis = new FileInPutStream("day10\\csdn\\jp.png");
//2.创建输出流对象
FileOutPutStream fos = new FileOutPutStream("day10\\eee\\jp02.png");
//3.创建一个数组,定义其长度大于拷贝文件图片的大小(比如1028)
byte[] bytes = new byte[1028];
//4.定义一个变量len,使用while循环
int len;
//语义:将文件读取的字节数据交给len,然后跟-1进行比较
while((len = fis.read) != -1){
//最后将读取的数据使用输出流写出指定的文件路径中
//从文件图片的字节个数0开始一直写到结尾
fos.write(bytes,0,len);
}
//5.关闭流释放系统资源
fis.close();
fos.close();
}
}
好了,以上就是使用输出流输入流对文件图片字节个数的读取…写的不是很好,有什么错误请联系本人哟!谢谢大家