IO流
首先要理解 外存,内存,缓存
io分为输入和输出:
个人理解:
-
输出就是(OutputStream):把文件从idea上输出出去
-
输入就是(InputStream):把文件读取到idea上去
输入输出又可以分为:
-
字节流:数据流中最小的数据单元是字节
输出:OutputStream
输入:InutStream
-
字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节(无论中文还是英文都是两个字节)。
输出:Writer
输入:Reader
最基本的输入输出:
System.out 标准输出流
System.in 标准输入流
看到这你应该很熟悉,如果不熟悉你就应该反思一下
File类
专门管理磁盘文件与目录:创建抽象路径
注意:File 类只能操作文件的属性,文件的内容是不能操作的。
- 因为每种系统路径的分隔符都是不一样的,所以java提供了separator方法
//不使用 Java 提供的分隔符字段,注意:这样写只能在 Windows 平台有效
File f1 = new File("D:\\IO\\a.txt");或者是D:/IO/a.txt
//使用 Java 提供的分隔符File f2 = new File("D:"+File.separator+"IO"+File.separator+"a.txt");
File 类的常用方法
①、**创建方法**
1.boolean createNewFile() 不存在返回true 存在返回false
2.boolean mkdir() 创建目录,如果上一级目录不存在,则会创建失败
3.boolean mkdirs() 创建多级目录,如果上一级目录不存在也会自动创建
②、**删除方法**
1.boolean delete() 删除文件或目录,如果表示目录,则目录下必须为空才能删除
2.boolean deleteOnExit() 文件使用完成后删除
③、**判断方法**
1.boolean canExecute()判断文件是否可执行
2.boolean canRead()判断文件是否可读
3.boolean canWrite() 判断文件是否可写
4.boolean exists() 判断文件或目录是否存在
5.boolean isDirectory() 判断此路径是否为一个目录
6.boolean isFile() 判断是否为一个文件
7.boolean isHidden() 判断是否为隐藏文件
8.boolean isAbsolute()判断是否是绝对路径 文件不存在也能判断
④、**获取方法**
1.String getName() 获取此路径表示的文件或目录名称
2.String getPath() 将此路径名转换为路径名字符串
3.String getAbsolutePath() 返回此抽象路径名的绝对形式
4.String getParent()//如果没有父目录返回null
...........
不喜欢写这些对象方法,因为你可以去jdk中查找
这里直接带过字节流,字符流————太简单了,看看api就会用的东西
- 读取数据流
- 装载到一个数组中
- 遍历存储到一个文件中直到遇到-1这种就停止
剩下的就是方法调用
缓冲流或管道流
字节缓冲流:BufferedInputStream、BufferedOutputStream
字符缓冲流:BufferedReader、BufferedWriter
所谓缓冲流其实就和我们普通的字节字符流差不多,你在使用普通流的时候就已经把数据装载到了数组中,而我们看缓冲流源码可知他已经给我们提供了一个大小8192的数组;
//字节缓冲输入流
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream("io"+File.separator+"a.txt"));
//定义一个字节数组,用来存储数据
byte[] buffer = new byte[1024];
int len = -1;//定义一个整数,表示读取的字节数
while((len=bis.read(buffer))!=-1){
System.out.println(new String(buffer,0,len));
}
//关闭流资源
bis.close();<br><br>
//字节缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("io"+File.separator+"a.txt"));
bos.write("ABCD".getBytes());
bos.close();
//字符缓冲输入流
BufferedReader br = new BufferedReader(
new FileReader("io"+File.separator+"a.txt"));
char[] buffer = new char[10];
int len = -1;
while((len=br.read(buffer))!=-1){
System.out.println(new String(buffer,0,len));
}
br.close();
//字符缓冲输出流
BufferedWriter bw = new BufferedWriter(
new FileWriter("io"+File.separator+"a.txt"));
bw.write("ABCD");
bw.close();