一、文件

File类
File对象属性:
static final String separator:存储了当前系统的路径分隔符,支持跨平台
boolean canRead(),boolean canWrite()
boolean exists()
long length() //字节单位
boolean isDirectory(),boolean isFile()
boolean isHidden()
long lastModified()
String getName(),String getPath(),String getParent()
String getAbsolutePath() //返回此File对象的绝对路径
File f = new File(“E:/abc.txt”);
f.createNewFile();//创建文件
F.mkdirs();//创建文件夹
F.exists();//判断文件或者文件夹是否存在
F.delete();//删除文件
F.getAbsolutePath();//获取文件路径
F.getName();//获取文件名称
F.length();//获取文件大小
F.renameTo();//在同一路径下是重命名,在不同路径下是剪切

二、IO流

I:input 输入(读取数据); O:output 输出(写入数据)。
字节流(stream):处理图片、音频、视频等二进制文件
InputStream : 字节输入流
OutputStream : 字节输出流
字符流 : 处理文本文件
Readeer : 字符输入流
Writer : 字符输出流

  1. public static void met() {
  2. //InputStream 抽象类
  3. try {
  4. FileInputStream file = new FileInputStream("E:/abc.txt");
  5. byte[] bytes = new byte[40];
  6. //读取信息
  7. //param: 字节数组;把读取到的数据放到字节数组中
  8. int a = file.read(bytes);//返回值:从文件读取到的字节数量,如果文件读取结束,返回-1
  9. public static void met1() {
  10. try {
  11. FileInputStream fil = new FileInputStream("E:/abc.txt");
  12. byte[] bytes = new byte[20];
  13. int length = 0;
  14. //read() 方法返回值为-1 读取结束
  15. while((length=fil.read(bytes)) != -1) {
  16. //验证
  17. //param1:byte[] param2:int offset 偏移量(开始的索引) param3:length 长度(把指定内容转换成字符串)
  18. String s = new String(bytes, 0, length);
  19. System.out.println(s);
  20. }
  21. //关闭资源
  22. fil.close();
  23. } catch (FileNotFoundException e) {
  24. e.printStackTrace();
  25. } catch (IOException e) {
  26. e.printStackTrace();
  27. }
  28. }

IO流 - 图1

1. 输入字节流InputStream

字节输入流的抽象基类是InputStream,常用的子类是 FileInputStream和BufferedInputStream。
1)FileInputStream
文件字节输入流:一切文件在系统中都是以字节的形式保存的,无论你是文档文件、视频文件、音频文件…,需要读取这些文件都可以用FileInputStream去读取其保存在存储介质(磁盘等)上的字节序列。
FileInputStream在创建时通过把文件名作为构造参数连接到该文件的字节内容,建立起字节流传输通道。
然后通过 read()、read(byte[])、read(byte[],int begin,int len) 三种方法从字节流中读取 一个字节、一组字节。

2)BufferedInputStream
带缓冲的字节输入流:上面我们知道文件字节输入流的读取时,是直接同字节流中读取的。由于字节流是与硬件(存储介质)进行的读取,所以速度较慢。而CPU需要使用数据时通过read()、read(byte[])读取数据时就要受到硬件IO的慢速度限制。我们又知道,CPU与内存发生的读写速度比硬件IO快10倍不止,所以优化读写的思路就有了:在内存中建立缓存区,先把存储介质中的字节读取到缓存区中。CPU需要数据时直接从缓冲区读就行了,缓冲区要足够大,在被读完后又触发fill()函数自动从存储介质的文件字节内容中读取字节存储到缓冲区数组。
BufferedInputStream 内部有一个缓冲区,默认大小为8M,每次调用read方法的时候,它首先尝试从缓冲区里读取数据,若读取失败(缓冲区无可读数据),则选择从物理数据源 (譬如文件)读取新数据(这里会尝试尽可能读取多的字节)放入到缓冲区中,最后再将缓冲区中的内容返回给用户.由于从缓冲区里读取数据远比直接从存储介质读取速度快,所以BufferedInputStream的效率很高。

2.. 输出字节流OutputStream

定义和结构说明:IO 中输出字节流的继承图可见上图,可以看出:
OutputStream 是所有的输出字节流的父类,它是一个抽象类。
ByteArrayOutputStream、FileOutputStream是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。PipedOutputStream 是向与其它线程共用的管道中写入数据,
ObjectOutputStream 和所有FilterOutputStream的子类都是装饰流。具体例子跟InputStream是对应的。