输入流InputStream的常用方法
int read()从输入流读取一个八位的字符,把它转换为0~255之间的整数,并返回这一整数
int read(byte【】 b) 从输入流读取若干字节,把他们保存到参数b自定的字节数组中,返回的整数表示读取字节数
int read(byte【】b,int off,int len) 从输入流读取若干字节,把他们保存到参数b自定的字节数组中,off指定字节数组开始保存数据的起始下标,len表示读取的字节数目
void close() 关闭输入流并释放与该流关联的所有系统资源
输出流OutStream的常用方法
void write(int b)向输入流写入一个字节
viod write(byte【】b)把参数b指定的字节数组的所有字节写到输出流
void write(btye【】b,int off,int len)将指定byte数组中从偏移量off开始的len个字节写入输出流
void fush() 刷新此输出流并强制写出所有缓冲的输出字节
viod colse()
FileInputStream和FileOutputStream针对文件的读写
FileInputStream是InputStream的子类
在test.txt文件中输入itcast
import java.io.*;
public class Example{
public static void public static void main(String[] args)throws Exception{
//创建一个文件字节输入流
FileInputStream in =new FileInputStream("test.text");
int b=0; //记住每次读取的一个字节
while(true){
b=in.read();
if(b==-1){
break;
}
System.out.println(b);
}
in.colse();
}
}
因为itcast各占一个字节,因此最终显示的就是文件test.txt中的六个字节所对应的十进制数
与FileInputStream对应的是FileOutputStream(文件输出流)
import java.io.*;
public class Example{
public void public static void main(String[] args) throws Exception{
//创建一个文件字节输出流
FileOutputStream out=new FileOutputStream("Example.txt);
String str="测”;
byte []b=str.getBytes();
for(int i=0;i<b.length;i++){
out.write(b[i]);
}
out.close();//如果像一个已经存在的文件写入数据,那么该文件的数据首先被清空,若希望增加新的内容,则可以使用构造函数FileOutputStream(String fileName,booelan append)来创建文件输出流对象,并将append的参数设为true;
}
}
最后通常将关闭流的操作写在finally{}代码块中
finally{
try{
if(in!=null){
in.close();
}catch(Exception e){
e.printStackTrace();
}
try{
if(out!=null){
out.colse()
}catch(Exception e){
e.printStackTrace();
}
}
}
}
文件的拷贝
首先在当前目录下创建文件夹source和target,然后再source文件夹下放一个“天下。MP3”的文件
import java.io.*;
public class Example{
public static void public static void main(String[] args) throws Exception{
//创建一个字节输入流,用于读取当前目录下sourc文件夹中的MP3文件
InputStream in=new FileInputStream("source\天下.mp3");
//创建一个文件字节输出流,用于将读取的字节写入target目录下的文件中
outputStream out=new FileInputStream("target\天下.mp3");
int len;//记住每次读取的一个字节
Long begintime=System.currentTimeMillis();//获取拷贝文件前的系统时间
while((len=in.read())!=-1){
out.write(len);
}
Long endtime=System.currentTimeMillis();//获取文件拷贝结束时系统时间
System.out.println("拷贝文件消耗的时间是"+endtime-begintime);
in.colse();
out.colse();
}
}
以上是单个字节的读取,在拷贝文件时,可以一次性读取多个字节的数据,并保存在字节数组中,然后将字节数组中的数据一次性写入文件。
import java.io.*;
public class Example{
public static void public static void main(String[] args) throws Exception{
//创建一个字节输入流,用于读取当前目录下sourc文件夹中的MP3文件
InputStream in=new FileInputStream("source\天下.mp3");
//创建一个文件字节输出流,用于将读取的字节写入target目录下的文件中
outputStream out=new FileInputStream("target\天下.mp3");
//以下是用缓冲区读写文件
byte[] butt=new byte[1024];//定义一个字节数组,作为缓冲区
int len;//记住读取读入缓冲区的字节数
Long begintime=System.currentTimeMillis();//获取拷贝文件前的系统时间
while((len=in.read(buff))!=-1){//判断是否读到文件末尾
out.write(buff,0,len);//从第一个字节开始,向文件写入len个字节
}
Long endtime=System.currentTimeMillis();//获取文件拷贝结束时系统时间
System.out.println("拷贝文件消耗的时间是"+endtime-begintime);
in.colse();
out.colse();
}
}
字节缓冲流
在IO包中提供两个带缓冲的字节流,BufferedInputStream和BufferdOutputStream
import java.io.*;
public class Example{
public static void public static void main(String[] args) throws Exception{
//创建一个带缓冲去的输入流
BufferedInputStream bis=new BufferedInputStream( new FileInputStream("source\天下.mp3"));
//创建一个带缓冲区的输出流
BufferdOutputStream bos=new BufferdOutputStream(new FileInputStream("target\天下.mp3"));
int len;//记住每次读取的一个字节
Long begintime=System.currentTimeMillis();//获取拷贝文件前的系统时间
while((len=bis.read())!=-1){
bos.write(len);
}
Long endtime=System.currentTimeMillis();//获取文件拷贝结束时系统时间
System.out.println("拷贝文件消耗的时间是"+endtime-begintime);
in.colse();
out.colse();
}
}
这两个流内部都定义了一个大小为8192的字节数组