一,字节流
1、InputStream抽象类
InputStream 为字节输入流,它本身为一个抽象类。Inputstream类中的常用方法:
(1) public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。若返回值=-1说明没有读取到任何字节读取工作结束。
(2) public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的
(3) public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。
(4) public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用,
(5) public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取
(6) public int close( ) :我们在使用完后,必须对我们打开的流进行关闭.
主要的子类:
1) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作
2) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
3) StringBufferInputStream:把一个String对象作为InputStream
4) PipedInputStream:实现了pipe的概念,主要在线程中使用
5) SequenceInputStream:把多个InputStream合并为一个InputStream
6) FilterInputStream:也是抽象类
2、OutputStream抽象类
OutputStream提供了3个write方法来做数据的输出,这个是和InputStream是相对应的。OutputStream提供了3个write方法来做数据的输出,这个是和InputStream是相对应的。
(1) public void write(byte b[ ]):将参数b中的字节写到输出流。
(2)public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。
(3) public abstract void write(int b) :先将int转换为byte类型,把低字节写入到输出流中。
(4)public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。
(5) public void close( ) : 关闭输出流并释放与流相关的系统资源。
注:
流结束的判断:方法read()的返回值为-1时;readLine()的返回值为null时。
3、FileInputStream文件输入流
public class FileInputStreamDemo {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("a.txt");
int a;
while ((a = fis.read()) != -1) {
System.out.print((char)a);//强制转换为char
}
fis.close();
}
}
4、FileOutputStream文件输出流
注:
(1)文件中写数据时,若文件已经存在,则覆盖存在的文件;
(2)读/写操作结束时,应调用close方法关闭流。
例子:
使用键盘输入一段内容,将内容保存在文件write.txt中
public class FileOutputStreamDemo {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("write.txt");
int a;
while ((a = System.in.read()) != -1) {
fos.write(a);
}
fos.close();
}
}
5、缓冲输入输出流 BufferedInputStream/ BufferedOutputStream(也称包装流)
a、将文件读入内存:
将BufferedInputStream与FileInputStream相接
FileInputStream in=new FileInputStream( “file1.txt “);
BufferedInputStream bin=new BufferedInputStream(in);
b、将内存写入文件:
将BufferedOutputStream与 FileOutputStream相接
FileOutputStreamout=new FileOutputStream(“file2.txt”);
BufferedOutputStream bin=new BufferedInputStream(out);
c、键盘输入流读到内存
将BufferedReader与标准的数据流相接
InputStreamReader sin=new InputStreamReader (System.in) ;
BufferedReader bin=new BufferedReader(sin);
例子:从键盘输入一串内容存到file1.txt文件中
public class FileInputStreamDemo {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("file1.txt")));
String s;
while ((s = br.readLine()).length() > 0) {
bw.write(s, 0, s.length());
bw.newLine();
}
bw.flush();//把缓冲区内容写到文件
br.close();
bw.close();
}}