IO流
一.
1.什么是IO流?
在工作中,经常回去操作磁盘上的资源,这个过程中实现了数据的输入和输出操作,磁盘上的文件和内存之间进行交互,数据的交互需要有一个媒介或者管道,把这个媒介或者管道就称为IO流,也被称为输入输出流 I:Input O:Output
※※总结※※:
输入(read)是输入到内存中
输出(write)是输出到文件(硬盘)里
2.流的作用和原理
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
3.IO流的种类:
父类:
3.1按流向分:
1)输入流:
- FileInputStream(继承InputStream抽象类)
文件字节输入流(操作英文字母等) - FileReader(继承Reader抽象类)
文件字符输入流(操作汉字和英文字母等)
2)输出流
- FileOutputStream(继承OutputStream抽象类)
文件字节输出流 - FileWriter(继承Writer抽象类)
文件字符输出流
3.2按流的内容分:
1)字节流:
- FileInputStream文件字节输入流
- FileOutputStream文件字节输出流
2)字符流:
- FileReader文件字符输入流
BufferedReader(常用,继承Reader)缓冲字符输入流 - FileWriter文件字符输出流
BufferedWriter(常用,继承Writer)缓冲字符输出流
二.
1.字节输入流:(InputStream抽象类)
方法:
文件字节输入流(FileInputStream):
package cn.cc.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* @author CC
* 文件(字节)输入流
*/
public class InputSteamDemo {
public static void main(String[] args) {
InputSteamDemo inputSteamDemo = new InputSteamDemo();
inputSteamDemo.readFile1();
inputSteamDemo.readFile2();
}
public void readFile1() {
FileInputStream fis = null;
try {
fis = new FileInputStream("F:\\abc.cui");
//读取文件内容
//声明一个字节数组,存放读取的内容
byte[] content = new byte[1024];
//读取文件信息
fis.read(content);
System.out.println(new String(content));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void readFile2() {
//创建文件对象
File file = new File("F:\\c.cc");
byte[] aryContent = new byte[(int) file.length()];
FileInputStream fis = null;
//创建字节输入流
try {
fis = new FileInputStream(file);
fis.read(aryContent);
System.out.println(new String(aryContent));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
2.字节输出流(OutputStream抽象类)
方法:
文件字节输出流(FileOutputStream):
package cn.cc.io;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author CC
* 文件(字节)输出流
*/
public class OutPutStreamDemo {
public static void main(String[] args) {
OutPutStreamDemo outPutStream = new OutPutStreamDemo();
outPutStream.writeFile();
}
public void writeFile() {
String str = "java is a lanauage! \n hahaha";
FileOutputStream fos = null;
try {
fos = new FileOutputStream("F:\\c.ccc");
fos.write(str.getBytes());
System.out.println("写入成功!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fos!=null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
3.字符输入流(Reader抽象类)
BufferedReader缓冲字符输入流(是对Reader的增强,与FileReader一样都继承自Reader)
package cn.cc.io;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
* @author CC
* 字符输入流
* 一行一行的读取
*/
public class BufferedFileReaderDemo {
public static void main(String[] args) {
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader("F:\\c.cc");
br = new BufferedReader(fr);//为FileReader的对象fr创建一个缓冲区域
//读取一行信息,BufferedReader中独有的方法
String str = br.readLine();
while(str!=null) {
System.out.println(str);
str = br.readLine();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
4.字符输出流(Writer抽象类)
BufferedWriter缓冲字符输出流(是对Writer的增强,与FileWriter一样都继承自Writer)
package cn.cc.io;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
/**
* @author CC
* 字符输出流
* 一行一行的输出
*/
public class BufferedWriterDemo {
public static void main(String[] args) {
FileWriter fw = null;
BufferedWriter bw = null;
try {
//续写
//如果FileWriter("dir",true);的话表示这个文件不会被重新生成,会覆盖。
//而且写入的内容是从这个文件的结尾开始写入。
fw = new FileWriter("f:\\a.aa",true);
bw = new BufferedWriter(fw);//为FileWriter的对象fw创建一个缓冲区域
//如果文件第一行有信息,则新开辟一行
//如果第一行没有信息,则直接写入
bw.newLine();
//在新行中写入内容
bw.write("aaaaaaaa");//先写入到缓冲区中
bw.flush();//刷新到硬盘中
System.out.println("写入结束!");
} catch (IOException e) {
e.printStackTrace();
}
}
}