File:(凡是与输入、输出相关的类、接口等都定义在java.io包下)
● 是一个类,可以有构造函数创建其对象。此对象对应着一个文件或文件目录,表示文件(夹)
● 它的方法,仅涉及如何创建、删除、重命名等,文件内容的读取、修改,无法处理,必须由io流来完成
● 它的对象与平台无关
● 它的对象常作为参数传递给流的构造函数
------------------------------------------------------------------------------------------------------------------
File类的构造函数:(构造器)
File(String pathname):以pathname为路径创建File对象
● 绝对路径:从盘符开始依次指明文件(夹)所在的路径(File file = new File("d:\\IO\\hello.txt"))
● 相对路径:从工程所在的位置开始查找(File file = new File("hello.txt"))
File(String parent,String child):以parent为父路径,child为子路径创建File对象
注意:路径分隔符,‘/’或者‘\\’。File.separator: 获取路径的分隔符
------------------------------------------------------------------------------------------------------------------
File方法:
访问文件名:
● getName():获得文件(夹)名
● getPath():获得声明File对象时,File指定的路径
● getAbsoluteFile():获得File对象形式的文件(夹)绝对路径
● getAbsolutePath():获得字符串形式的文件(夹)绝对路径
● getParent():获得文件(夹)的上级目录
● renameTo(File newName):重命名,重命名后原来的文件(夹)会被删除
文件检测:
● exists():判断文件(夹)是否存在,存在返回true,否则返回false
● canWrite():判断文件(夹)是否可写,可写返回true,否则返回false
● canRead():判断文件(夹)是否可读,可读返回true,否则返回false
● isFile():判断File对象是否是文件,是返回true,否则返回false
● isDirectory():判断File对象是否是文件夹,是返回true,否则返回false
获取常规文件信息:
● lastModified():返回最后一次修改文件的时间(long型的值)
● length():返回文件(夹)的大小(byte:字节为单位)
文件和目录操作相关:
● createNewFile():在指定路径下创建一个文件。该文件存在,则失败返回false,否则创建成功返回true
● delete():删除指定的文件(夹)
● mkDir():新建文件(夹),只创建最后一级目录(路径中有一个文件夹不存在时,则失败)
● mkDirs():新建文件(夹),目录中的路径不存在时,同时创建
● list():返回当前路径下的所有文件(夹)String类型的数组
● listFiles():返回当前路径下的所有文件(夹)File类型的数组
------------------------------------------------------------------------------------------------------------------
IO原理:(IO流用来处理设备之间的数据传输)
● input(输入):读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中
● output(输出):将程序(内存)数据输出到磁盘、光盘等存储设备中
注意:输入输出的叫法是相对的,看自身承担着什么角色
------------------------------------------------------------------------------------------------------------------
流的分类:
● 按照数据单位:字节流(二进制数据操作如视频、音频、图片等)(8 bit),字符流(只能处理纯文本文件)(16 bit)
● 按照流向:输入流(把文件读取到程序中),输出流(从程序输出的)
● 按照角色:节点流,处理流
注意:IO流共涉及40多个类,都是这4个类派生,这四个类派生出来的子类名称都是以其父类名作为子类名后缀
------------------------------------------------------------------------------------------------------------------
IO流体系:
------------------------------------------------------------------------------------------------------------------
InputStream、Reader:(所有输入流的基类)
InputStream:(字节输入流)
Reader:(字符输入流)
注意:会出现编译时异常(可能找不到文件、FileNotFoundException)需要显示处理。文件读取方法有多种,根据情况选择使用哪种方式读取。打开的文件IO资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件IO资源。每次读取多少字符、字节合适就好,并不是越大或者越小就好
------------------------------------------------------------------------------------------------------------------
OutputStream、Writer:(所有输出流的基类)
OutputStream:(字节输出流)
Writer:(字符输出流)
注意:会出现编译时异常(可能找不到文件、FileNotFoundException)需要显示处理。文件输出方法有多种,根据情况选择使用哪种方式输出。打开的文件IO资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件IO资源
-----------------------------------------------------------------------------------------------------------------
输入输出流综合使用:
字节流:
字符流:
注意:写入文件时,目录下有同名文件将被覆盖,读取文件时,必须保证该文件已存在,否则出异常
------------------------------------------------------------------------------------------------------------------
处理流之一:(缓冲流)
好比网上下载文件,没开通会员只能以KB速度下载,开通会员后就能以M的速度下载(缓冲流,提高效率)
BufferedInputStream、BufferedOutputStream:
BufferedReader、BufferedWriter:
注意:缓冲流要“套接”在相应的节点流上。对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()将会使内存中的数据立刻写出
------------------------------------------------------------------------------------------------------------------
处理流之二:(转换流:字节流和字符流之间的转换)
注意:字节流中的数据都是字符时,转成字符流操作更高效。构造器第二个参数为相应的字符集编码
------------------------------------------------------------------------------------------------------------------
处理流之三:(System.in、System.out标准输入输出流)
● System.in的类型是InputStream
● System.out的类型是PrintStream
------------------------------------------------------------------------------------------------------------------
处理流之四:(对象流:用于存储和读取对象,把Java中的对象写入到数据源中,也能把对象从数据源中还原回来)
● 序列化(Serialize):把java对象转换成平台无关的二进制流,把数据持久地保存在磁盘上或者其他文件中
● 反序列化(Deserialize):把磁盘上或者其他文件中的数据通过二进制流获取,恢复成原来java对象
注意:不能序列化static和transient修饰的成员变量。如果需要让某个对象可序列化,则必须让其类可序列化,并且如果此类的某字段不是基本数据类型或String类型,而是另一个引用类型,那么这个引用类型也必须可序列化。在该类上必须实现Externalizable或者Serializable(常用此接口)接口之一。实现Serializable接口的类都有一个表示序列化版本标识符的静态变量(private static final long serialVersionUID = 1L)。serialVersionUID用来表明类的不同版本间的兼容性,如果没有显示定义这个静态变量,它的值是Java运行时环境根据类的内部细节自动生成的。若类的源代码作了修改,serialVersionUID可能发生变化。故建议,显示声明
------------------------------------------------------------------------------------------------------------------
RandomAccessFile类:(支持随机访问的方式,程序可以直接跳到文件的任意地方来读、写文件)
方法:
● getFilePointer():获取文件记录指针的当前位置
● seek(long pos):将文件记录指针定位到pos位置
构造器:(RandomAccessFile(File file, String mode) 、RandomAccessFile(String name, String mode))
● mode:访问模式
● r: 以只读方式打开
● rw:打开以便读取和写入
● rwd:打开以便读取和写入;同步文件内容的更新
● rws:打开以便读取和写入;同步文件内容和元数据的更新
读取文件内容:
写入文件内容:
------------------------------------------------------------------------------------------------------------------
字符集编码表:
计算机只能识别二进制数据,为了方便应用计算机,让它可以识别各个国家的文字。就将各个国家的文字用数字来表示,并一一对应,形成一张表。这就是编码表
常见的编码表:
● ASCII:美国标准信息交换码
● ISO8859-1:拉丁码表。欧洲码表
● GB2312:中国的中文编码表
● GBK:中国的中文编码表升级,融合了更多的中文文字符号
● Unicode:国际标准码,融合了多种文字(所有文字都用两个字节来表示,Java使用的就是unicode)
● UTF-8:最多用三个字节来表示一个字符
注意:编码:字符串--->字节数组。解码:字节数组--->字符串
------------------------------------------------------------------------------------------------------------------
流的总结:
● 流是用来处理数据的
● 处理数据时,一定要先明确数据源,与数据目的地
● 数据源可以是文件,可以是键盘
● 数据目的地可以是文件、显示器或者其他设备
● 而流只是在帮助数据进行传输,并对传输的数据进行处理,比如过滤处理、转换处理等
------------------------------------------------------------------------------------------------------------------
自己整理,有些地方是扒拉的,如有侵犯,还望告知
应用程序开发——IO流(File、输入流、输出流、各种处理流、随机访问)
最新推荐文章于 2024-04-18 05:05:36 发布