java文件IO流体系
2017-01-12 13:59
190 查看
字符流的体系;
----------| Reader 抽象类 , 所有输入字符流的基类。
---------------| FileReader 读取文件字符数据的输入字符流.
---------------| BufferedReader 该类出现的目的:提高读取文件字符数据的效率,对FileReader的功能进行了拓展---readLine()。 缓冲输入字符流
--------| Writer 抽象类 所有输出字符流的基类。
-----------| FileWriter 向文件输出数据的输出字符流.
-----------| BufferedWriter 缓冲输出字符流, 目的: 为了提高写文件数据的效率以及拓展FileWriter的功能。
像BufferedWriter缓冲类它的底层维护了一个缓冲字符数组,当数组中的存储满了才会传输出去,当没满时,需要调用flush或者是close方法数据才会真正的写出去。 或者字符数组已经存储满了,数据也一样会写出去。
例子:
File file = new File("F:/test.txt");
//建立数据的输入输出通道
FileWriter fileWriter = new FileWriter(file);
//相当于封装了FileWriter类
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write("test");
//若不关闭或者flush刷新字符数组,它的test字符串不会输入到test.txt文件中去
bufferedWriter.close();
输入字节流的体系:
----------| InputStream 抽象类 所有输入字节流的基类
--------------| FileInputStream 读取文件数据的输入字节流
--------------|BufferedInputStream 缓冲输入字节流 该类的本质其实只是在内部维护了一个8kb的字节数组而已。 主要是为了提高我们的读取文件 的效率。
输出字节流:
----------| OutputStream 抽象类 所有输出字节流的基类。
----------------| FileOutputStream 向文件写出的数据的输出字节流
----------------| BufferedOutputStream 缓冲输出字节流
本质是在内部维护了一个8kb的字节数组。主要是为了提高我们的读取文件 的效率。
读取文件顺序:
//建立文件的输入通道。
FileReader fileReader = new FileReader(file);
//缓冲输入字符流
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line = null;(字符流的时候用它读取)
while((line = bufferedReader.readLine())!=null){
System.out.println(Arrays.toString(line.getBytes()));
}
序列流:
SequenceInputStream(序列流)可以用于将多个文件合并到一起;
其若要合并个文件以上则需要通过Vector集合来接收再得到迭代器。
//找到目标文件对象
File inFile1 = new File("F:\\day01.txt");
File inFile2 = new File("f:\\day02.txt");
File inFile3 = new File("f:\\day03.txt");
File outFile = new File("f:\\总结.txt");
//建立数据的输入输出通道
FileOutputStream fileOutputStream = new FileOutputStream(outFile);
FileInputStream fileInputStream1 = new FileInputStream(inFile1);
FileInputStream fileInputStream2 = new FileInputStream(inFile2);
FileInputStream fileInputStream3 = new FileInputStream(inFile3);
Vector<FileInputStream> v = new Vector<FileInputStream>(); //Vector 是一个线程安全的类,操作效率低。 我想使用ArrayList
v.add(fileInputStream1);
v.add(fileInputStream2);
v.add(fileInputStream3);
Enumeration<FileInputStream> e = v.elements(); //通过Vector得到一个迭代器。
//创建一个序列流对象
SequenceInputStream inputStream = new SequenceInputStream(e);
若想用ArrayList集合则需要利用匿名内部类:
final Iterator<FileInputStream> it = list.iterator();
//创建一个序列流对象
SequenceInputStream inputStream = new SequenceInputStream(new Enumeration<FileInputStream>() {
@Override
public boolean hasMoreElements() {
return it.hasNext();
}
@Override
public FileInputStream nextElement() {
return it.next();
}
});
PrintStream 打印流:
打印流的好处:
1. 打印流可以打印任意类型的数据。
2. 打印流打印任意类型数据之前,会先把数据转成字符串然后再打印出去。
作用2: 收集日志信息
FileOutputStream fileOutputStream = new FileOutputStream(new File("F:\\20150519.log"), true);
PrintStream printStream = new PrintStream(fileOutputStream);
try{
String str=null;
System.out.println("字符个数:"+ str.length());
int result = 4/0;
}catch(Exception e){
e.printStackTrace(printStream);
}
//标准的输出流默认是指控制台,可以进行修改。这样写后System.out.println的语句是录入文件中。
PrintStream printStream = new PrintStream(new File("F:\\b.txt"));
//修改标准的输出流
System.setOut(printStream);
System.out.println("hehe");
----------| Reader 抽象类 , 所有输入字符流的基类。
---------------| FileReader 读取文件字符数据的输入字符流.
---------------| BufferedReader 该类出现的目的:提高读取文件字符数据的效率,对FileReader的功能进行了拓展---readLine()。 缓冲输入字符流
--------| Writer 抽象类 所有输出字符流的基类。
-----------| FileWriter 向文件输出数据的输出字符流.
-----------| BufferedWriter 缓冲输出字符流, 目的: 为了提高写文件数据的效率以及拓展FileWriter的功能。
像BufferedWriter缓冲类它的底层维护了一个缓冲字符数组,当数组中的存储满了才会传输出去,当没满时,需要调用flush或者是close方法数据才会真正的写出去。 或者字符数组已经存储满了,数据也一样会写出去。
例子:
File file = new File("F:/test.txt");
//建立数据的输入输出通道
FileWriter fileWriter = new FileWriter(file);
//相当于封装了FileWriter类
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write("test");
//若不关闭或者flush刷新字符数组,它的test字符串不会输入到test.txt文件中去
bufferedWriter.close();
输入字节流的体系:
----------| InputStream 抽象类 所有输入字节流的基类
--------------| FileInputStream 读取文件数据的输入字节流
--------------|BufferedInputStream 缓冲输入字节流 该类的本质其实只是在内部维护了一个8kb的字节数组而已。 主要是为了提高我们的读取文件 的效率。
输出字节流:
----------| OutputStream 抽象类 所有输出字节流的基类。
----------------| FileOutputStream 向文件写出的数据的输出字节流
----------------| BufferedOutputStream 缓冲输出字节流
本质是在内部维护了一个8kb的字节数组。主要是为了提高我们的读取文件 的效率。
读取文件顺序:
//建立文件的输入通道。
FileReader fileReader = new FileReader(file);
//缓冲输入字符流
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line = null;(字符流的时候用它读取)
while((line = bufferedReader.readLine())!=null){
System.out.println(Arrays.toString(line.getBytes()));
}
序列流:
SequenceInputStream(序列流)可以用于将多个文件合并到一起;
其若要合并个文件以上则需要通过Vector集合来接收再得到迭代器。
//找到目标文件对象
File inFile1 = new File("F:\\day01.txt");
File inFile2 = new File("f:\\day02.txt");
File inFile3 = new File("f:\\day03.txt");
File outFile = new File("f:\\总结.txt");
//建立数据的输入输出通道
FileOutputStream fileOutputStream = new FileOutputStream(outFile);
FileInputStream fileInputStream1 = new FileInputStream(inFile1);
FileInputStream fileInputStream2 = new FileInputStream(inFile2);
FileInputStream fileInputStream3 = new FileInputStream(inFile3);
Vector<FileInputStream> v = new Vector<FileInputStream>(); //Vector 是一个线程安全的类,操作效率低。 我想使用ArrayList
v.add(fileInputStream1);
v.add(fileInputStream2);
v.add(fileInputStream3);
Enumeration<FileInputStream> e = v.elements(); //通过Vector得到一个迭代器。
//创建一个序列流对象
SequenceInputStream inputStream = new SequenceInputStream(e);
若想用ArrayList集合则需要利用匿名内部类:
final Iterator<FileInputStream> it = list.iterator();
//创建一个序列流对象
SequenceInputStream inputStream = new SequenceInputStream(new Enumeration<FileInputStream>() {
@Override
public boolean hasMoreElements() {
return it.hasNext();
}
@Override
public FileInputStream nextElement() {
return it.next();
}
});
PrintStream 打印流:
打印流的好处:
1. 打印流可以打印任意类型的数据。
2. 打印流打印任意类型数据之前,会先把数据转成字符串然后再打印出去。
作用2: 收集日志信息
FileOutputStream fileOutputStream = new FileOutputStream(new File("F:\\20150519.log"), true);
PrintStream printStream = new PrintStream(fileOutputStream);
try{
String str=null;
System.out.println("字符个数:"+ str.length());
int result = 4/0;
}catch(Exception e){
e.printStackTrace(printStream);
}
//标准的输出流默认是指控制台,可以进行修改。这样写后System.out.println的语句是录入文件中。
PrintStream printStream = new PrintStream(new File("F:\\b.txt"));
//修改标准的输出流
System.setOut(printStream);
System.out.println("hehe");
相关文章推荐
- Java IO流读写文件的几个注意点
- JAVA 文件上传下载笔记之使用基本IO流实现上传
- Java基础之IO流,文件的续写
- Java基础之IO流,按指定行号范围读取文本文件内容,带行业、带缓冲
- Java基础之IO流,使用字符流缓冲区复制文件
- java学习---文件IO流
- Java基础之IO流,打印异常信息到流(文件)中
- java IO流之三 使用缓冲流来读写文件
- java IO流之二 使用IO流读取存储文件
- Java基础之IO流,通过字节流对媒体文件进行复制操作
- IO与文件读写---Java的IO流架构
- JAVA文件IO流的理解(一)
- IO与文件读写---Java的IO流架构
- Java基础之IO流,创建文件并写入内容与IO异常的标准处理方法
- Java IO流读取文件
- 文件的输入输出与假加密——略析JAVA的IO流
- IO与文件读写---Java的IO流架构
- java IO流之三 使用缓冲流来读写文件
- Java基础之IO流,按字符数组读取文件(二)
- Java基础之IO流,通过字节流缓冲区进行媒体文件的复制操作