JAVA的IO流按流向分为两种:输入流,输出流。
* 流按操作类型分为两种:
* 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
* 字符流 : 字符流只能操作纯字符数据,比较方便。
InputStream的主要子类:
1) FileInputStream把一个文件作为InputStream,实现对文件的读取操作
2) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
3) StringBufferInputStream:把一个String对象作为InputStream
4) PipedInputStream:实现了pipe的概念,主要在线程中使用
5) SequenceInputStream:把多个InputStream合并为一个InputStream
Reader的主要子类:
|——BufferedReader
|___InputStreamReader
|__FileReader
字节流:
字节流两个抽象类:InputStream和OutputStream
1.字节流读取示例:
一次读取一个字节,直到遇到结尾返回-1
FileInputStream fis = new FileInputStream("test.txt");
int item;
while((item=fis.read())!=-1) {
System.out.println(item);
}
fis.close();
2.字节流写入示例:
true代表在目标文件中追加写入,否则清空重新写入
FileOutputStream fos = new FileOutputStream("out.txt",true);
fos.write('\n');
fos.write('s');
fos.close();
3.字节流拷贝示例:
读取到一个字节就写入一个字节
FileInputStream fis = new FileInputStream("cat.jpg");
FileOutputStream fos = new FileOutputStream("cat-copy.jpg");
int i;
while((i=fis.read())!=-1) {
fos.write(i);
}
fis.close();
fos.close();
增加一个拷贝的"容器"来提高效率,0代表从第0个位置开始,len代表写入的个数
FileInputStream fis = new FileInputStream("cat.jpg");
FileOutputStream fos = new FileOutputStream("cat-copy.jpg");
byte[] arr = new byte[1024*8];
int len = 0;
while((len = fis.read(arr))!=-1) {
fos.write(arr, 0, len);
}
fis.close();
fos.close();
通过buffer进行读写,其原理是内部有个byte[1024*8]的数组,在内存中进行读写
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("cat.jpg"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("cat-copy.jpg"));
int b;
while((b = bis.read())!=-1) {
bos.write(b);
}
bis.close();
bos.close();
flush和closed的区别:
flush将缓存中存满或未存满的数组立即输出出来;
closed在关闭之前也会去清空缓存;
字符流:
1.字符读取实例:
一次读取一个字符,直到返回-1
FileReader fr = new FileReader("test.txt");
int b;
while((b = fr.read())!=-1) {
System.out.println((char)b);
}
2.字符写入实例:
FileWriter fw = new FileWriter("out.txt");
fw.write("test");
fw.close();
3.带字符数据的读写实例:
字符流不能用来读写文本类型以外的数据,因为字节转字符的过程中可能出现问题。
FileReader fr = new FileReader("test.txt");
FileWriter fw = new FileWriter("copy-2.txt");
char[] arr = new char[1024];
int len;
while((len=fr.read(arr))!=-1) {
fw.write(arr, 0, len);
}
fr.close();
fw.close();
4.Buffer字符的读写实例:
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("copy-3.txt"));
int b;
while((b = br.read())!=-1) {
bw.write(b);
}
br.close();
bw.close();
5.LineNumberReader实例:
该类型可以读取行数和设置行数
LineNumberReader lr = new LineNumberReader(new FileReader("test.txt"));
String line;
lr.setLineNumber(2);
while((line = lr.readLine())!=null) {
System.out.println(lr.getLineNumber()+":"+line);
}
网友评论