java IO
input输入 output输出
所有的往内存中送数据的都是输入
所有的从内存中出数据的都是输出
能用java.io包的api方法操作的输入输出
内存-->外存(硬盘,光盘,u盘) 本地流输出
内存<--外存 本地流输入
结合Socket网络编程
内存-->网络上 网络流输出
内存<--网络上 网络流输入
网络流的案例:
计算机A 和远程计算机B
从计算机B的计算机上下载文件到计算机A上
先从B中的硬盘上本地流输入,把硬盘上的文件读入到B的内存
把内存中的文件数据网络流输出,把内存数据输出到网络上
计算机A网络流输入,把网络上的文件数据读入到A的内存
把A的内存中的数据,bendiliushuchudaoA的硬盘上
上传文件的过程跟下载是相反的
不能用java.io包操作的流
内存-->显示器
内存-->CPU
内存<--CPU
数据的持久化:
- 数据长时间保留在硬盘上
- 数据长时间保存在数据库上,其实数据库本质,是以数据文件的方式持久化到硬盘上
在硬盘中的实际体现出来的是文件和目录
java中提供了一个java.io.File类用来操作文件的目录信息和文件的信息
就是不能操作文件的内容
根据文件的内容操作分为:
字节流:对文件的内容读写是用字节的方式操作
字符流:对文件的内容读写是用字符流(ascii)的方式操作,但是其本质底层还是用字节流
java.io.File类:用户标识文件和目录的,根文件内容无关
注意一个问题:在不用的操作系统上对于目录的间隔符的区分
window:
c:\aa\bb\cc.txt
Linux:
/hone/aa/bb/cc.txt
在java中对路径的分割符的表示
window方式:
c:\\aa\\bb\\cc.txt
c:/aa/bb/cc.txt
Linux方式:
c:/aa/bb/cc.txt
如果想兼容window和Linux
"aa"+File.separator+"bb"+File.separator+"cc.txt"
File的api:
-构建File类对象
File(String filePath);
File(File Parent,String child);
File(String parentName,String child);
-isFile()
判断是否是文件
-isDirectory()
判断是否是目录
-length()
获取文件的长度
-exists()
判断文件或目录是否存在
-createNewFile()
创建一个空文件
返回值是boolean
如果指定的文件不存在,就创建文件并返回true
如果指定的文件存在,则返回false
-delete()
删除文件
注意:
如果File表示一个目录
删除的时候,要保证目录必须是空的
-mkdir()
创建一个目录
-mkdirs()
创建多个目录
-listFile()
返回指定目录中的所有文件和目录
-listFiles(FileFilter)
返回指定目录中的部分文件和目录,用FileFilter设定筛选条件
-listFile(FilenameFileFilter)
返回指定目录中的部分文件和目录,用FilenameFileFilter设定筛选条件
总结:
只能操作文件或目录的信息
就是不能操作文件的内容
RandomAccessFile类:
-可以操作文件的内容
-按照字节操作,字节流
-此类特殊,read读和write写都是此类中的api方法
-能够通过seek方法可以随意移动或改动文件的指针
RandomAccessFile类对文件的随机访问有两种模式
- 只读模式
- 读写模式
-创建对象
RandomAccessFile(file file,String mode);
创建从中读取和向其中写入的随机访问流
文件通过File指定
模式通过String指定
RandomAccessFile(String name, String mode);
创建从中读取和向其中写入的随机访问流
文件通过String指定
模式通过String指定
mode的取值:
"r"只读模式 read
"rw"读写模式 read write
-写入操作
-void write(int d);
此方法会根据当前指针所在的位置处写入一个字节,只能使用整型的低8位
-void write(byte[] buf);
此方法会根据当前指针所在的位置处写入一组字节
-void write(byte[] buf,int offset,int len);
将len个字节从指定的byte数组写入文件,并从偏移量offset处开始
-读取操作:
-int read()
从文件取出一个byte字节,填充到整型的低8位,如果返回-1,表示读取到文件的末尾EOF end of file
-int read(byte[] buf)
从指针指向的位置开始读取若干字节,存储到字节数组中
将读取到的字节按照顺序放在字节数组的相对应的位置
返回值为读取到字节数,也可以说成读取到的长度
返回值为-1,则读取到了末尾
-int read(byte[] buf,int offset,int len);
将最多len个数据字节从文件中读入byte数组中,并从偏移量offset开始存储
-void getFilePointer()
返回文件中的当前的偏移量
-void seek(long position)
设置到此文件开头0到文件指针偏移量,在该位置发生下一个读取或写入操作
-int skipBytes(int n)
用此方法可以跳过一些少量的字节,只能是跳正整数