JAVA IO操作

Java IO操作

I/O操作

文件和目录的抽象表示

1568432936396
File类在java.io.File中

file类与操作系统无关

1568433108243
路径分隔符:windows中就是分号(;),Linux是冒号(:)

默认名称分隔符:也称之为文件名称分隔符,windows是反斜杠(),Linux是正斜杠(/)

这里使用这些标识符,就是为了实现跨平台性!所以应该积极使用这些标识符而不是直接将这些符号写死:

1568433306216
绝对路径和相对路径:

? 1568433395838
划重点:相对路径是相对于当前项目的根目录的!

注意事项:

  1. 路径不区分大小写
  2. 路径中使用一个转义字符+一个普通字符的方式来表示一个普通字符

File类中的构造方法

1568433622957
划重点:

  1. 路径可以是文件,也可以是文件夹
  2. 这里只是把路径封装为File对象,并不获取路径的内容,所以不需要考虑路径的真假情况,路径本身不存在也没事

File f1=new File(pathname);

File类有四种创建方法:

1568433827317
第三种将父路径和子路径拆开的好处:

1568433882219
第一种相比第三种的区别:

父路径是File类型,可以使用File的方法对路径进行一些操作,再用路径创建新的对象

File类中的常用方法

1568434445553
第一种方法和第二种方法的区别:

第二种方法只会返回当初创建对象时传入的路径,是相对就传相对,是绝对就传绝对,而第一种只传递绝对路径

length()返回的不是文件名的长度,而是文件的长度,也就是文件的大小,它的单位是字节(注意,文件夹是没有大小概念的,所以不能用来获取文件夹的大小,要是获取了也是0)

如果给出的路径是不存在的,调用length()并不会报错,只会返回0

1568434797945
1568434983253
1568435009619

文件过滤器

在File类中有两个和ListFiles重载的方法,方法的参数就是过滤器

1568443358895
1568443464894
java.io.FileFilter接口:用于抽象路径名(File对象)的过滤器

? 作用:用来过滤文件

第一个方法的参数:File pathname:其实就是使用Listfiles方法遍历目录,得到的每一个文件对象

1568443555888
? 作用:用于过滤文件名称

? 参数:File dir:构造方法中传递的被遍历的目录 String name:遍历目睹获得的每一个文件的名称

注意,两个过滤器接口没有实现类,需要自己写实现类,重写过滤方法accept,在方法中自己定义过滤的规则具体流程如下:

  1. 创建过滤器的实现类,重写过滤方法,定义过滤规则
  2. 1568443819827
    可以优化为匿名内部类:

1568444039612

字节输出流OutputStream

是所有字节输出流的父类,定义了一些共性的成员方法

1568450694367
1568450736468
这些已知子类中对应着输出的不同场景

FilterOutputStream:带过滤器的输出流

ObjectOutputStream:写对象

重点学习FileOutputStream:

1568450973318
写入数据的原理:

java程序-》JVM-》OS-》调用OS中写数据的方法-》写入文件

写入步骤:

  1. 创建FileOutputStream对象,构造方法中传递写入数据的目的地
  2. 调用write方法写入
  3. 释放资源(流的使用会占用内存)

一次写入多个字节的方法

1568452478956
追加写:

1568452601888

InputStream

常用方法:

1568452708547
FileInputStream:文件字节输入流

1568452752579
读取多个字节:

1568452863173
返回的int是读取的有效字符数

字节数组转换为字符串

1568452938436

字符流

对于像中文符号这样的需要使用多个字节来表示的符号,使用字节读入会造成显示上的问题,所以这里我们采用字符流,以字符而不是字节为单位进行。字符流对于文本的处理能力要比字节流好。

实际使用上,对字符的操作还是比对字节的操作要多的

1568453969410
Reader是一个父类,其有和字节流完全类似的子类和用法,这里就不再赘述了

Flush和Close方法的区别

1568454346678
write是写入到内存缓存区中,只有调用Flush或者Close才会写入到硬盘

其他写出数据的方法

1568454473999

常用API

Random,ArrayList,Scanner

API简介

下面这张图的表达有问题,“Java API文档是程序员的字典”而不是API本身

1568444166582
1568444208774

Scanner

Scanner可以做到键盘输入数据

import java.util.Scanner

包的导入要在package之后,类的定义之前

Scanner sc=new Scanner(System.in);System.in是从键盘输入

  1. 获取键盘输入的一个int数字: int num=sc.nextInt();
  2. 获取键盘输入的一个字符串: String str=sc.next();

ArrayList

和C++STL中的vector类似


原文地址:https://www.cnblogs.com/jiading/p/11705854.html