IO体系表如下:
表中蓝底部分为开发中常用类,访问文件也称为节点流或者文件流;它们的关系如下:
1、字符流(FileReader和FileWrite)-处理文本文件。使用实例代码如下:
public void fileReader() {
//1 提供具体的流
FileReader fileReader = null;
try {
//2 实例化File对象
File file = new File("src/HelloWorld");
fileReader = new FileReader(file);
//3.1 read()是读一个字符,如果读到文件末尾返回-1
//3.2 read(char[] cbuf)将数据读如char[]中
int data;
do {
data = fileReader.read();
System.out.print((char) data + " ");
} while (data != -1);
} catch (Exception e) {
}finally {
try {
//无论是否读取成功,都需要保证输入流关闭
if(fileReader!=null)
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void fileWrite() throws IOException {
//实例化File对象
File file = new File("src/HelloWorld1");
System.out.println(file.getAbsolutePath());
//提供FileWriter流对象
/*
* FileWriter(File file,boolean append),
* append为true的话将直接在已存在的文件末尾添加内容
* append为false的话将新建文件覆盖旧文件,并添加内容
*/
FileWriter fileWriter = new FileWriter(file);
//向文件写内容
fileWriter.write("this is my writer");
//关闭流对象
fileWriter.close();
}
2、字节流(FileInputStream和FileOutStream)-处理非文本文件;实例代码参考字符流代码。
3、缓冲流(BufferInputStream和BufferOutputStream);实例代码如下:
public void testBufferStream() {
FileInputStream fileInputStream=null;
FileOutputStream fileOutputStream=null;
BufferedInputStream bufferedInputStream=null;
BufferedOutputStream bufferedOutputStream=null;
try {
//创建File对象
File file = new File("src/Pic.png");
File file2 = new File("src/Pic1.png");
//创建节点流FileInputStream
fileInputStream = new FileInputStream(file);
fileOutputStream = new FileOutputStream(file2);
//创建缓冲流
bufferedInputStream = new BufferedInputStream(fileInputStream);
bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
//
byte[] buffer = new byte[10];
int len;
while ((len = bufferedInputStream.read(buffer)) != -1) {
bufferedOutputStream.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
//由外到里关闭;其实这个关闭外层流之后里层也关闭了
bufferedInputStream.close();
bufferedOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
4、转换流(InputStreamReader和OutputStreamWriter)
注意!当new File(path)时,path是以当前项目为根的相对路径。