------- android培训、java培训、期待与您交流! ----------
在文件操作中,对于文本内容不是字符的文件,例如图片,影音等媒体文件,对这些文件的操作就不能用字符流,需要用字节流!
FileInputStream类,包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。
FileInputStream
类本身只是简单地重写那些将所有请求传递给所包含输入流的InputStream
的所有方法。FileInputStream
的子类
可进一步重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。
构造函数要传入一个要操作的文件对象FileInputStream(File file)
读字节方法:
read() 从此输入流中读取一个数据字节
read(byte[] b)从此输入流中将最多 b.length
个字节的数据读入一个字节数组中
read(byte[] b, int off, int len)从此输入流中将最多 len
个字节的数据读入一个字节数组中
有一个特别的一个方法:available() 返回值是int类型, 作用是返回可以不受阻塞地从此文件输入流中读取的字节数,就是要操作的文件的总字节数,好处是当你需要定义一个字节数组要接收读取的内容时,并不能知道数组的容量是多少,有了这个方法,就可以清晰的定义容量为此方法的返回值。但是当一个文件足够大的时候,而Java虚拟机中的内存并没有那么大,超出内容会出现错误,所以在文件很大的时候并不适合这样使用。
FileOutputStream类,用于写入诸如图像数据之类的原始字节的流
文件输出流是用于将数据写入 File
或 FileDescriptor
的输出流。文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个FileOutputStream(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。
此类的构造函数和读取类差不多,也需要传入一个或者说一个从新创建的文件对象。
写字节方法:
write(byte[] b) 将 b.length
个字节从指定字节数组写入此文件输出流中
write(byte[] b, int off, int len)将指定字节数组中从偏移量 off
开始的len
个字节写入此文件输出流
write(int b)将指定字节写入此文件输出流
当写入一个或一组字节之后,FileWriter对象往往需要用flush()方法刷新一下缓冲区,但此类并不需要刷新,就直接写入文件中,但是程序结束后还要关闭流对象释放资源。
下面是一个复制图片文件的例子:
import java.io.*;
class CopyPic{
public static void main(String args[]){
FileOutputStream fos = null;
FileInoutStream fis = null;
try{
fis = new FileInputStream("1.jpg");
fos = new FileOutputStream("2.jpg");
byte[] buf = new byte[fis.available()]; //当文件比较大的时候不建议用此方法
int len = fis.read(buf);
if(len!=-1)
fos.write(buf);
}catch(IOException e){
throw new RutimeException("复制失败");
}finally{
try{
if(fis!=null)
fis.close();
}catch(IOException e){
throw new RutimeException("读取关闭失败");
}finally{
try{
if(fos!=null)
fos.close();
}catch(IOException e){
throw new RutimeException("写入关闭失败");
}
}
}
}
}