之前是学习到了有关文件的操作,主要是对文件进行创建删除查找搜索等等。~现在就可以对文件进行一些简单的操作了。比如读和写~
这里所说的IO流就是对应的InputStream和OutputStream。分别是字节输入流和字节输出流。我觉得这里有一处容易混淆的是呢InputStream字节输入流可能我们在字面理解输入就是往文件里输入么?但。。恰恰相反。这里的流的源头是文件,所以输入是从文件往外,而OutputStream输出流才是向文件方向的。。刚开始接触感觉好容易弄混的。多多练习敲敲代码就ok啦。
下面总结一下这个IO流的简单的使用:
public static void copyFile(){
try {
//实例化一个InputStream对象
InputStream is = new FileInputStream("src/IOStream.java");
//实例化一个数组,长度为文件的长度
byte array[] = new byte[is.available()];
//进行read操作,并将结果存入array数组中
is.read(array);
//实例化一个OutputStream对象
OutputStream os = new FileOutputStream("src/IOFileTest.txt");
os.write(array);
System.out.println("文件拷贝成功");
is.close();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
上面一段代码就是对InputStream和OutputStream的一个简单的操作,功能相当于文件的拷贝。
感觉有几个需要注意的地方。首先~~查看API就会知道我们使用的InputStream和OutputStream都是抽象类,Abstract Class。因为抽象类无法实例化,所以我们是通过FileInputStream和FleOutputStream这两个子类来进行实例化的。还有就是进行读写的时候,也可以采用另一种方法,就是一个字节一个字节的读和写~~那样的话,代码会比这种的多~~所以木有采用。
其他都很简单的,执行这一段代码之后的效果就是在src下面又生成了一个Txt文件,内容就是与这段代码相同的~~
所说的都是字节输入输出流。还有一种就是过滤流(结点流):BufferedInputStream和BufferedOutputStream。这个与字节流不同的是在执行的时候会创建一个缓冲区,在读取的时候是要先存入这个缓冲区,当缓冲区存满之后在讲所有字节读取出去。这种方法与字节流那一个字节一个字节的传输在效率上肯定有所提高。
代码的实现,与字节流很相似的~~只有些许的不同:
首先,我们看下API,BufferedInputStream和BufferedOutputStream这两个类的构造方法,都是要传一个InputStream或者OutputStream流的参数的,所以再实例化的时候还是要先实例化一个字节输入输出流的对象,再作为参数传给缓冲流的实例化。
其次使用缓冲流的时候还要用到另一个方法: flush()。他的作用是刷新缓冲流。就是命令缓冲区的字节内容写入到输出流中,如果使用缓冲流的时候木有调用这个方法,那么在所要拷贝的文档中是看不到任何内容的。~~