一.I/O流的划分与概念
数据流是一组有顺序,有起点和终点的字节集合
InputStream 输入流 只能读不能写
OutStream 输出流 只能写不能读
数据源------>程序-------->数据接收器
输入流 输出流
java流根据读取文件单位的分类:字节流与字符流
在最底层,所有的输入流都是以字节形式的,基于字符的流是为了处理字符提供有效快捷的方法
二.示例
1.如何遍历文件夹里的所有文件
public class FileList {
public static void main(String[] args) {
File file=new File("G://");
getFile(file);
}
public static void getFile(File file) {
File file1[]=file.listFiles();//创建一个集合来遍历file
for (File f : file1) {//遍历集合file
if (f.isDirectory()) {//如果是目录
System.out.println("------------>"+f.getAbsolutePath());
getFile(f);//继续遍历
}else {
System.out.println(f.getAbsolutePath());
//如果不是目录,则输出文件
}
}
}
}
2.用字节流来读写
public class ByteSteam {//用字节流读写
public static void main(String[] args) throws IOException {
FileOutputStream fos=new FileOutputStream(new File("G:/java基础/新建文件夹/1.txt"));
String str="大家好";
fos.write(str.getBytes());
FileInputStream fis=new FileInputStream("G:/java基础/新建文件夹/2.txt");
byte[] b=new byte[1024];
while(fis.read(b)!=-1) {
fos.write(b);
}
}
}
3.用字符流来读写
public class CharSteam {//用字符流读写
public static void main(String[] args) throws IOException {
FileWriter fw=new FileWriter(new File("G:/java基础/新建文件夹/3.txt"),true);
FileReader fr=new FileReader("G:/java基础/新建文件夹/4.txt");
int i;
while((i=fr.read())!=-1) {
fw.write(i);
}
fw.close();
}
}
字符流与字节流的区别:
操作字节流本身是不会用到缓冲区,是文件本身直接操作的,而字符流操作用到了缓冲区.如果我们在写的过程中,不关闭流,文件写入的数据是无法保存的.