IO流就是InputStream和OutputStream
这两个是字节流的顶级父类
相对与程序框来说,InputStream就是往程序输入数据,OutputStream就是输出数据
这里的输入输出是相对程序来说的
InputStream的常用方法 OutputStream的常用方法
int read()
void write(int b)
从输入流读取一个8位的字节,把它转换成0~255之间 向输出流写入一个字节(自动将b转换成二进制的类型数据)
的整数,并返回。
int read(byte[] b) void write(byte[] b)
从输入流读取若干字节,把他们保存到参数b指定
将参数b指定的字节数组的所有字节写到输出流
的字节数组中,返回的整数代表读取字节数。
int read(byte [] b,int off,int len) void write(byte[] b,int off,int len)
从输入流读取若干字节,保存到数组b,off表示数组中 将指定byte数组中从偏移量off开始的len个字节写入输出流
开始保存数据的索引,len表示读取的字节数
void close( ) void flush()
关闭输入流,并释放与该流关联的所有系统资源 刷新此输入流并强制写出所有缓冲的输出字节
void close()
关闭此输出流并释放与此流相关的所有系统资源
-------------------------------------------------------------------------------------------------------------------
用字节流读取文件
FileInputStream是InputStream的之类,它是操作文件的字节输入流
接下来的代码要现在当前目录下创建一个文本文件test.txt,并在里面写下”itcast“
import java.io.*;
public class 字节流读写文件 {
public static void main(String[] args) throws Exception{
FileInputStream in = new FileInputStream("test.txt");
int b = 0;
while(true){
b = in.read();
if(b == -1)
break;
System.out.println(b);
}
in.close();
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
用字节流写文件
FileOutStream是相对FileOutStream的子类,它是操作文件的字节输出流,专门把用于数据写入文件
import java.io.*;
public class 写入数据 {
public static void main(String[] args)throws Exception {
FileOutputStream out = new FileOutputStream("test.txt");//FileOutStream的构造函数FileOutStream(String fileName,boolean append)如果将
String str = "我的文件"; //参数boolean设置为true,则会在已存在的文件中追加内容
byte[] b=str.getBytes();
for(int i = 0 ;i < b.length; i++)
{
out.write(b[i]);
}
out.close();
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
IO流会产生异常,所以要用throws将异常抛出,然而一旦遇到异常,close()方法将无法执行,流对象所占用的资源将得不到释放,为此,通常将关闭流的代码写在finally代码块中
finally{
try{
if(in!=null) //如果in不为空,关闭输入流
in.close()
}catch (Exception e){
e.printStackTrace();
}
try{
if(out!=null) //如果out不为空,关闭输出流
out.close();
}catch (Exception e){
e.printStackTrace();
}
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
文件的拷贝
<span style="font-size:14px;">public class 文件的拷贝 {
public static void main(String[] args)throws Exception {
InputStream in =new FileInputStream("source\\Beyond.mp3");
//创建一个字节输入流,用于读取当前目录下的source文件中的mp3文件
OutputStream out =new FileOutputStream("target\\Beyond.mp3");
//创建一个字节输出流,用于将读取的数据写入target目录下的文件中
int len; //定义一个int类型的变量len,记住每次读取的一个字节。
long begintime = System.currentTimeMillis(); //当前系统时间
while((len = in.read()) != -1){ //读取一个字节并判断是否读到文件末尾
out.write(len); //将读取到的字节写入文件
}
long endtime=System.currentTimeMillis(); //获取拷贝结束时的系统时间
System.out.println("拷贝文件所消耗的时间是:"+(endtime-begintime)+"毫秒");
in.close();
out.close();
}
}</span>
上面的代码是一个字节一个字节的读取,效率不高,可以定义一个字节数组作为缓冲区,一次性读取多个字节的数据,并保存在数组里,然后将字节数组中的数据一次性写入文件。
public class 文件的拷贝 {
public static void main(String[] args)throws Exception {
InputStream in =new FileInputStream("source\\Beyond.mp3");
//创建一个字节输入流,用于读取当前目录下的source文件中的mp3文件
OutputStream out =new FileOutputStream("target\\Beyond.mp3");
//创建一个字节输出流,用于将读取的数据写入target目录下的文件中
byte[] buff = new byte[1024]; //定义一个缓冲区,用来读写文件
int len; //定义一个int类型的变量len,记住每次读取的一个字节。
long begintime = System.currentTimeMillis(); //当前系统时间
while((len = in.read(buff)) != -1){ //读取一个字节并判断是否读到文件末尾
out.write(buff,0,len); //将读取到的字节写入文件
}
long endtime=System.currentTimeMillis(); //获取拷贝结束时的系统时间
System.out.println("拷贝文件所消耗的时间是:"+(endtime-begintime)+"毫秒");
in.close();
out.close();
}
}