IO流:
(1)IO流的分类
A:流向分(要站在Java程序的角度)
输入流 -------读取数据
输出流 -------写出数据
B:数据类型
字节流:
字节输入流
字节输出流
字符流
字符输入流
字符输出流
注意:
a:一般来说,如果没有说是按照什么分,默认指按照数据类型分。
b:什么时候用字符流?什么时候用字节流?
把要操作的文件用记事本打开,如果能够读懂里面的内容,就用字符流。
否则用字节流。如果你不知道,用字节流。
(2)IO流的体系结构:
字节流:
字节输入流----- InputStream
FileInputStream
BufferedInputStream
字节输出流 -----OutputStream
FileOutputStream
BufferedOutputStream
字符流:
字符输入流 -------Reader
FileReader
BufferedReader
字符输出流 --------Writer
FileWriter
BufferedWriter
(3)FileWriter写出数据
字符输出流操作步骤:
A:创建字符输出流对象。
B:调用wirte()方法
C:释放资源。
代码体现:
FileWriter fw = new FileWriter("fw.txt");
fw.write("hello,IO,我来了");
fw.flush();
fw.close();
(4)FileReader读取数据
字符输入流操作步骤:
A:创建字符输入流对象。
B:调用read()方法,把数据显示。
C:释放资源。
代码体现:
FileReader fr = new FileReader("fw.txt");
//方式1
int ch = 0;
while((ch=fr.read())!=-1) {
System.out.print((char)ch);
}
//方式2
char[] chs = new char[1024];
int len = 0;
while((len=fr.read(chs))!=-1) {
System.out.print(String.valueOf(chs,0,len));
}
fr.close();
(5)字符缓冲区类:
BufferedReader:
特有功能:
public String readLine():一次读取一行数据,只有数据没有换行符。
BufferedWriter:
特有功能:
public void newLine():根据操作系统决定写入什么样的换行符。
案例:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
/*
* 编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,
* 并将原来文件的扩展名从.java改为.jad。
*
* 先把java文件复制过去,然后在复制后的目录下改名。
*
* 分析:
* A:封装数据源目录
* B:获取该目录所有满足条件的File数组。
* public File[] listFiles(FilenameFilter filter)
* C:遍历File数组,得到每一个File对象。
* D:复制文本文件。
* E:在目的地目录改名。
*/
public class CopyJavaFileDemo {
public static void main(String[] args) throws IOException {
// 封装数据源目录
File srcFloder = new File("d:\\java");
// 获取该目录所有满足条件的File数组。
File[] fileArray = srcFloder.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return new File(dir, name).isFile() && name.endsWith(".java");
}
} );
// 封装目的地目录
File destFolder = new File("d:\\jad");
if (!destFolder.exists()) {
destFolder.mkdir();
}
// 遍历File数组,得到每一个File对象。
for (File file : fileArray) {
String name = file.getName();
File destFile = new File(destFolder, name);
// 复制文本文件
copy(file, destFile);
}
// 在目的地目录改名。
File[] destFiles = destFolder.listFiles();
for (File file : destFiles) {
String name = file.getName();
String newName = name.replace(".java", ".jad");
File newFile = new File(destFolder, newName);
file.renameTo(newFile);
}
private static void copy(File file, File destFile) throws IOException {
// 封装数据源
BufferedReader br = new BufferedReader(new FileReader(file));
// 封装目的地
BufferedWriter bw = new BufferedWriter(new FileWriter(destFile));
// 读写
String line = null;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
// 释放资源
bw.close();
br.close();
}
}