文件IO流
字节流,字符流:--------->非文本文件都用字节流8bit传输, 其余(文本文件)使用字符流16bit.
输入流,输出流:--------->数据输入程序输入流,程序输出数据输出流
四个主要抽象实现类:
抽象基类 节点流(文件流) 缓冲流
- Inputstream: FileInputstream: BufferInputstream 字节流
- OutputStream FileOutputStream BufferOutputStream 字节流
- Reader FileReader BufferReader 字符流
- Writer FileWriter BufferWriter 字符流
操作步骤:
- 创建流及对应的文件
- 具体的读取,写出过程
- 关闭资源,流
- 涉及到资源关闭都用try-catch
特别注意:
- 对于输入流来讲,读取的文件一定要存在,否则,报FileNotFoundException错
- 对于输出流来讲,写出的文件如果不存在,在输出的过程,会自动创建此文件,()前提是文件存在的目录要存在)
- 写出的文件若存在,则写出的文件将覆盖原有文件存储的内容
字符流实操
package iotest;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import org.junit.Test;
public class FileTest {
public void testFileReader() {
//创建流及对应的文件
File f1=null;
FileReader fr=null;
try {
f1 = new File("E:\\testFile\\hello.txt");
fr = new FileReader(f1);
//具体的读取操作
System.out.println(fr.read());
} catch (IOException e) {
e.printStackTrace();
}finally {
//关闭流
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Test
public void testFileWriter() {
//创建流及文件
File f2=new File("target1.txt");
FileWriter fw=null;
try {
fw = new FileWriter(f2);
//写入具体过程
fw.write("对不起,我是警察");
fw.write("你是警察,谁又知道呢!");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//使用(字符流)FileReader和FileWriter完成文本文件复制操作
//复制 @Test public void testCopy() { //创建流和文件 FileReader fr=null; FileWriter fw=null; try { File ff1=new File("target.txt"); File ff2=new File("target1.txt"); fr=new FileReader(ff1); fw=new FileWriter(ff2); //具体的读入和写出操作 char [] cbuf=new char[5]; int len; while ((len=fr.read(cbuf)) !=-1) { //写出操作 fw.write(cbuf, 0, len); } } catch (IOException e) { e.printStackTrace(); }finally { //关闭资源 try {fw.close(); } catch (IOException e) { e.printStackTrace(); } try { fr.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
//使用(字节流)FileInputStream和FileOutStream完成非文本文件复制操作
package iotest; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.junit.Test; public class FileOutTest { //复制 @Test public void testCopy() { FileInputStream fir=null; FileOutputStream fow=null; try { //创建流和文件 File ff1=new File("C:\\Users\\花花\\Pictures\\Camera Roll\\小帅哥.jpeg"); File ff2=new File("C:\\Users\\花花\\Pictures\\Camera Roll\\tim1.jpg"); fir=new FileInputStream(ff1); fow=new FileOutputStream(ff2); //具体的读入和写出操作 byte[] buffer=new byte[1024]; int len; while ((len=fir.read(buffer)) !=-1) { //写出操作 fow.write(buffer, 0, len); } } catch (IOException e) { e.printStackTrace(); }finally { //关闭资源 try { fow.close(); } catch (IOException e) { e.printStackTrace(); } try { fir.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }