java中IO分类
按照数据流向分:输入流—————-输出流
按照数据单位:字节流——————字符流
按照是否直接和数据源相连:节点流———处理流
一,字节流转换成字符流(转换流)
用InputStreamReader 输入字节流转换成输入字符流
FileInputStream fis = new FileInputStream("aaa.txt");
Reader reader=new BufferedReader(fis);
用OutputStreamWriter输出字节流转换成输出字符流
FileOutputStream fos=new FileOutputStream("bbb.txt");
Writer writer=new OutputStreamWriter(fos);
public class TestChangStream {
//输入 字节流--->字符流
public Reader inputStreamToReader(InputStream is){
Reader reader = null;
reader = new InputStreamReader(is);
return reader;
}
//输出 字节流--->字符流
public Writer outputStreamToWriter(OutputStream os){
Writer writer = null;
writer = new OutputStreamWriter(os);
return writer;
}
}
2.按行读写
按字节(取一滴) —– 按字符(取一勺) —– 按行(取一桶)
(1). 以行为单位读写,比较方便
(2). 相当于缓冲区 缓冲区每次取一行
读一行:
使用的是 BufferedReader的readLine()方法
写一行:
使用的是 PrintWriter的println()方法
按行写也可以用BufferedWriter的write()方法换一行是newLine();
public class TestBufferWritter {
public static void main(String[] args) {
// FileInputStream fis=null;
FileReader fr = null;
BufferedReader br = null;
FileWriter fw = null;
BufferedWriter bw = null;
// PrintWriter pw = null;
try {
fr = new FileReader("F:\\Bluemix\\chapter13\\20160416.txt");
br = new BufferedReader(fr);
} catch (FileNotFoundException e) {
System.out.println("文件不存在");
e.printStackTrace();
}
// 写
try {
fw = new FileWriter("F:\\Bluemix\\chapter13\\222222222.txt");
// pw = new PrintWriter(fw);
bw = new BufferedWriter(fw);
String str = null;
while ((str = br.readLine()) != null) {
/*if (br.ready()) {
pw.print(str);
} else {
pw.println(str);
}*/
bw.write(str);
bw.newLine();
}
System.out.println("写入成功!");
} catch (IOException e) {
System.out.println("写入失败");
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
System.out.println("br关闭失败");
e.printStackTrace();
}
}
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
System.out.println("fr关闭失败");
e.printStackTrace();
}
}
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
System.out.println("bw关闭失败");
e.printStackTrace();
}
}
if (fw != null) {
try {
fw.close();
} catch (IOException e) {
System.out.println("fw关闭失败");
e.printStackTrace();
}
}
}
}
}
三,缓冲流
功能:减少和硬盘打交道次数 提高读写效率
字节流、字符流频繁和硬盘打交道 速度比较慢 效率低,可以使用缓冲提高效率。
带缓冲的流:
1.BufferedReader
2.BufferedWriter
3.PrintWriter
重点:缓冲区的内容写入到文件的三种情况:
1.调用BufferedWriter的flush()方法
2.缓冲流关闭 close();调用close()方式是系统缓冲的数据写到磁盘中
3.缓冲区满 ,默认缓冲区大小为16384个字节
实质char[] charArr = new char[8192];