File类
用来表示系统文件和目录的抽象类,文件和目录的抽象的表示。
java.io.File类代表系统文件(文件和目录)
——磁盘上的文件和目录在java程序中都是用File类的实例来表示。
常用构造方法
——public File(String pathname)
以pathname为路径创建File对象,如果pathname是相对路径,则是相对于java的系统属性use.dir中的路径(java系统属性的use.dir路径就是当前字节码运行的目录)
File类是一个常用属性
——public static final String separator 存储了当前系统的路径分隔符
在UNIX系统上,此字段的值为‘/’;在Windows上,它为’\’
为了程序的跨平台性。文件的路径应该用这个属性值来代表。
File常用的方法
public boolean canRead()
public boolean canWrite()
public boolean exists()
public boolean isDirectory()
public boolean isFile()
public boolean isHidden()
public long lastModified()
public long length()——以字节为单位
public String getName()
public String getPath()
public String getAbsolutePath()
public String getCanonicalPath()——返回File对象的规范路径名字符串
public File getCanonicalFile()——返回File对象的规范形式
public String getParent()
public URL toURL()——返回此文件的统一资源标识符名
对文件的操作:
public boolean createNewFile() // 创建空文件
pubilic boolean delete()//删除,如果是目录必须时空才能删除
oublic boolean mkdir()//
public boolean mkdirs()//递归创建目录
public boolean renameTO(File dest)
浏览目录中的文件和子目录
public String[] list()//以数组形式文件名和目录名
public File[] listFile()//返回File实例数组,存放文件名和目录名
public File[] listFiles(FilenameFileter fileter)//返回此目录中指定过滤器file
java.io.FilenameFilter接口:事项此即可的类实例可用于过滤文件名
Java流输入/输出基本原理
数据流(Stream)是指数据通信的通道。文件和程序的通道
java程序中对数据的输入、输出操作十一”流“方式进行的。JDK中提供了各式的”流“类来获取不同种类的数据。
Java流的分类
JDK所有的流类位于java.io中,分别继承一下四种抽象类
字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
InputStream抽象类
——继承自InputStream的流都是用于向程序中输入数据的,且数据的单位为字节(8位),紫色为节点流,棕色为过滤流
——InputStream基本方法
public abstract int read() throws IOException //返回-1
public int read(byte[] b) throws IOExceotion //读完存b
public int read(byte[] b,int off,int len) throws IOExceotion
publi void close() throws IOExceotion
public int avaliable() throws IOExceotion //可读的字节流
public skip (long n ) throws IOExceotion //跳过字节
实现类FileInPutStream使用方法:
——1:创建一个FileInputStream对象
——2:调用read方法速去单个字节
——3:循环读取,如果返回-1则读取完毕
——4:输出
——5:关闭FileInputStream对象,释放资源
OutputStream抽象类
继承自OutputStream的流是程序用于向外输出数据的,且数据单位为字节(8位)
——OutputStream方法
public abstract void write(int b ) throws IOExceotion//
public void write (byte[] b) throws IOExceotion
public void write (byte[] b,int off,int len) throws IOExceotion
public void flush() throws IOExceotion//刷新并写入到缓冲输出字节
public void close() throws IOExceotion
实现类FileOutputStream的使用方法
——1:创建FileOutputStream对象
——2:调用write方法写数据
——3:调用flush方法刷新
——4:关闭,释放资源
Reader抽象类
继承自Reader的流都是用于向程序中输入数据的,且数据单位为字符(16位)
public int read() throws IOExceotion
public int read (char[] cbuf)
FileReader 字符输入流其父类InputStreamReader
Writer抽象类
适合才做文本文件
输入流和输出流
输入流:程序从中读取数据
输出流:程序能向其中的流
字节流和字符流
字节流:以字节为单位传输数据的流
字符流:以字符为单位传输数据的流
节点流和过滤处理流
节点流
节点流:用于直接操作目标设备的流
过滤流:是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更为强大、灵活的读写功能。
文件流
过滤流
不会对文件进行直接操作
提高读写效率!在内存中开辟缓冲区,缓冲流从缓存区中读取数据。节点流负责对文件直接操作数据。之后放入缓冲区中。
缓冲流
BufferedInputStream
原理:
在使用缓冲流时,会创建一个内部缓冲区(数组)。在读取自己或字符时,会先把从数据源中读取的数据存放至缓存区中,然后由缓冲流从缓冲区中读取数据。
写数据时,先将要写入的数据填充到缓冲区中,然后在有节点流负责进行写入到文件。
四种缓冲流
——BufferedInputStream可以对任何的InputStream进行包装
——BufferedOutputStream可以对任何的OutputStream进行包装
——BufferReader可以对任何的Reader流进行包装:
新增了readLine()方法用于一次读取一行字符串
——BufferWriter可以对任何的Writer流进行包装:
新增了newLine()方法用于一次读取一行字符串
注意:
——碎玉缓冲输出流,写出数据会先缓存在内存缓冲区中,关闭此流前要用flush方法将缓冲区的数据立刻写出。
——关闭过滤流时,会自动关闭过滤流所包装的所有底层流
转换流
转换流用于字节流和字符流之间的装换
JDK提供了两种转换流
——InputStreamReader需要InputStream”套接“,可以将字节流中读入的字节解码成字符。
——OutputStreamReader需要OutputStream”套接“,可以将字节流编码成字节。
Object流
序列化:
就是为了数据能够更好的在网络中传输,序列化会吧数据已字节进行编码存放。
——能被序列化的对象所对应的类必须实现java.io.Serializable接口
反序列化:
数据流
打印流
打印流属于输出流
PrintStream和PrintWriter都属于输出流,分别针对字节和字符
PrintStream和PrintWriter类都提供了一系列重载的print和println方法来输出各种类型的数据。
System.out就是PrintStream的一个实例。
java.io.Printwriter 中write()与Print()区别
Print方法可以将各种类型的数据转换成字符串的形式输出。重载的write方法只能输出字符、字符数组、字符串等字符相关的数据