在Java中操作的都是对象,但File是一个文件,想要在程序中使用,需要先声明一个File类来代表要操作的文件,并使用File类中的方法对文件进行操作(用一个File类来代表要操作的文件)
File(String filePath)
File(String parentPath,String childPath)
File(File parentPath,String childPath)
public String getAbsolutePath()//获取绝对路径 *
public String getPath()//获取路径
public String getName()//获取名称
public String getParent()//获取上层文件目录,如果无返回null *
public long length()//获取文件长度(字节数),不能获取目录长度
public long lastModified()//获取最后一次的修改时间,毫秒值
//适用于文件目录
public String[] list() //获取指定目录下的所有文件或文件目录的名称数组
public File[] listFiles() //获取指定目录下的所有文件或文件目录的list数组
//File类的重命名功能
public boolean renameTo(File dest)//把文件重命名为指定的文件路径
//File类的判断功
public boolean isDirector()//判断是否是文件目录 *
public boolean isFile()//判断是否是文件 *
public boolean exists()//判断是否存在 *
public boolean canRead()//判断是否是可读
public boolean canWrite()//判断是否是可写
public boolean isHidden()//判断是否是隐藏
//File类的创建功能
public boolean createNewFile()//创建文件。若文件存在则不创建并返回 false *
public boolean mkdir()//创建文件目录。若文件目录存在则不创建,如果此文件目录的上层目录不存在,也不创建。
public boolean mkdirs()//创建文件目录。如果此文件目录的上层目录不存在,一并创建。 *
/*注:如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目路径下 */
//File类的删除功能
public boolean delete()//删除文件或文件夹 *
/*注意:java中的删除不走回收站。要删除一个文件目录时,要注意该文件目录内不能包含文件或文件目录
流的分类
处理字节流的抽象类:(抽象类不可实例化)
处理字符流的抽象类:
另外四个比较重要的:
转换流
对象流
File对象文件路径需要注意的点:
main中的路径是相对于本项目的
read读回来的数据是int格式的,需要转成char类型
为了保证流资源一定可以关闭需要使用try-catch-finall来处理
字节流与字符流的使用
可以使用字节流实现文本文件的复制
不可以在执行时,通过控制台程序看要复制的文本文件
因为文本中的内容是char(2字节)型的,而字节流是byte(1字节)类型的,通过控制台程序toString方法转化时会发生截断,导致数据丢失
如果只是复制是可以的,相当于把文件当成字节流来处理,可以实现正确复制
用字符流实现非文本文件是不可以的
作用:提高文件读写的速度
缓冲流:BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWrite
使用
//BufferedInputStream
bufferedInputStream.read(byte[] buffer)
//BufferOutputStream
bufferedInputStream.Write(byte[] buffer,0,len)
//BufferedReader
bufferedReader.read(char[] cbuffer)
bufferedReader.readline() + bufferedReader.newline()//不复制换行符,newline相当于换行符
//BufferedWrite
bufferedWrite.Write(char[] cbuffer,0.len)
作用:提供了字节流和字符流的转换
Java API提供的转换流:
好记法:底层是用字节流存的,这两个转换流是为了对文件数据进行存取
在程序对文件进行操作时,操作的是字符,所以这两个是属于字符流的
两者结合可以实现字符集编码转换
System.out //默认从控制台输出
System.in //默认从键盘输入
作用:实现将基本数据类型的数据格式转化为字符串输出
PrintStream
PrintWriter
实现了对print()和println()的各种重载
作用:为了方便的操作Java语言的基本数据类型和String的数据,可以使用数据流
DataInputStream
DataOutputStream
作用:与数据流类似,但是可以更好的操作对象
注意:读的顺序需要与写入顺序一致
常见的编码表:
ASCII:美国标准信息交换码。用一个字节的7位表示
ISO8859-1:拉丁码表。欧洲码表。用一个字节的8位表示
GB2312:中国中文编码表。最多两个字节编码所有字符
GBK:中国的中文编码表升级。融合了更多的中文文字符号,最多两个字节编码
Unicode:国家标准码,融合了目前人类使用的所有字符。为每个字符分配唯一的字符码。所有的文字都用两个字节来表示
UTF-8:变长的编码方式,可以使用1-4个字节来表示一个字符
注:
序列化:Serialization 将对象的状态信息转换为可以存储或传输形式的过程
(对象(内存) -------> 字节数组或字节序列)
反序列化:DeSerialization (字节数组(外存)或字节序列(网络) -------> 对象(内存) )
ObjectOutputStream a.writeObject //实现序列化
ObjectInputStream b.readObject //实现反序列化
注:
没有定义任何操作的接口,作用相当于一种规范(可以用作代码运行时的分支判断)
需要在类定义时,实现Serializbtion接口(implements Serialization)
static属性不参与序列化
想要某属性不参与序列化可以加tansient(临时透明 、在内存中存储)实现属性透明 persistance(持久序列化、在外存中存储)
原文:https://www.cnblogs.com/zhoushuaiyi/p/14548230.html