标签:
一.字节流与字符流
1.1 InputStream和Reader
InputStream是抽象类,本身并不能创建实例来执行输入,它里面包含如下几个方法:
1.Int read():从输入流中读取单个字节,返回所读取的字节数据。 2.int read(byte[] b):从输入流中最多读取b.length个字节的数据,并将其存储在字节数组b中,返回实际读取的字节数。 3.int read(byte[] b,int off,int len):从输入流中最多读取len个字节的数据,并将其存储在数组b中,放入数组b中时,并不是从数组起点开始,而是从off位置开始,返回实际读取的字节数。 4. int available() throws IOException:返回流中的有效字节数。 .long skip(long n) throws IOException: 忽略numBytes个字节,返回实际忽略的字节数 6.abstract void close() throws IOException: 关闭输入
正如前面提到的,InputStream和Reader都是抽象类,本身不能创建实例,但它们分别有一个用于读取文件的输入流:FileIputStream和FileRead,它们都是节点流——会直接和指定文件关联。
下面示范使用FileIputStream来读取自身是效果。
import java.io.*; public class FileInputStreamTest { public static void main(String[] args) throws IOException { // 创建字节输入流 FileInputStream fis = new FileInputStream( "D:/j2se1/testWorkspace/Test1234/src/FileInputStreamTest.java");//这里我用了绝对地址 // 创建一个长度为1024的“竹筒” byte[] bbuf = new byte[1024]; // 用于保存实际读取的字节数 int hasRead = 0; // 使用循环来重复“取水”过程 while ((hasRead = fis.read(bbuf)) > 0 ) { // 取出“竹筒”中水滴(字节),将字节数组转换成字符串输入! System.out.print(new String(bbuf , 0 , hasRead )); } // 关闭文件输入流,放在finally块里更安全 fis.close(); } }
结果如下:
import java.io.*; public class FileInputStreamTest { public static void main(String[] args) throws IOException { // 创建字节输入流 FileInputStream fis = new FileInputStream( "D:/j2se1/testWorkspace/Test1234/src/FileInputStreamTest.java"); // 创建一个长度为1024的“竹筒” byte[] bbuf = new byte[1024]; // 用于保存实际读取的字节数 int hasRead = 0; // 使用循环来重复“取水”过程 while ((hasRead = fis.read(bbuf)) > 0 ) { // 取出“竹筒”中水滴(字节),将字节数组转换成字符串输入! System.out.print(new String(bbuf , 0 , hasRead )); } // 关闭文件输入流,放在finally块里更安全 fis.close(); } }
1.2 OutputStream和Writer
OutputStrean和Writer也非常相似。两个流提供了如下方法:
1.void close() :关闭此输出流并释放与此流有关的所有系统资源。 2.void flush() :刷新此输出流并强制写出所有缓冲的输出字节。 3.void write(byte[] b): 将 b.length 个字节从指定的字节数组写入此输 出流。 4.void write(byte[] b, int off, int len: 将指定字节数组中从偏移量 off 开始的 len 个字节写入此输出流。 5.abstract void write(int b) :将指定的字节写入此输出流。
下面程序使用FileInputStream来执行输入,并使用FileOutputStream来执行输出,用于实现复制FileOutpputStreamTest.java文件的功能。
import java.io.*; public class FileOutputStreamTest { public static void main(String[] args) { try( // 创建字节输入流 FileInputStream fis = new FileInputStream( "FileOutputStreamTest.java"); // 创建字节输出流 FileOutputStream fos = new FileOutputStream("newFile.txt")) { byte[] bbuf = new byte[32]; int hasRead = 0; // 循环从输入流中取出数据 while ((hasRead = fis.read(bbuf)) > 0 ) { // 每读取一次,即写入文件输出流,读了多少,就写多少。 fos.write(bbuf , 0 , hasRead); } } catch (IOException ioe) { ioe.printStackTrace(); } } }
标签:
原文地址:http://www.cnblogs.com/leejuntongxue/p/4386797.html