导图社区 File类、IO流节点流知识点学习笔记
一、File类1、file类对象可以表示一个文件或一个目录 2、file类不负责读写文件,常常作为参数传入io流中创建对象,读写文件1、构造器注意:当new FIle()对象的时候,如果指定的文件或者...
编辑于2022-11-07 18:06:17 广东File类、IO流节点流知识点学习笔记
File类
访问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()
//返回此File对象的绝对路径
public File getAbsoluteFile()
:返回此抽象路径名的绝对路径名的形式
public String getParent()
:获取父目录
示例
System.out.println("文件或目录是否存在:" + file.exists());
System.out.println("是文件吗:" + file.isFile());
System.out.println("是目录吗:" + file.isDirectory());
System.out.println("名称:" + file .getName());
System.out.println("路径: " + file.getPath());
System.out.println("绝对路径: " + file.getAbsolutePath());
System.out.println("最后修改时间:" + file.lastModified());
System.out.println(“文件大小:” + file.length()+ “ 字节”);
public static final String separator
在 UNIX 系统上,此字段的值为 '/';在 Microsoft Windows 系统上,它为 '\\'
对文件的操作:
public boolean createNewFile() //不存在时创建此文件对象所代表的空文件
public boolean delete() //删除文件。如果是目录必须是空才能删除
public boolean mkdir() //创建此抽象路径名指定的目录
public boolean mkdirs() //创建此抽象路径名指定的目录,包括所有必需但不存在的父目录
public boolean renameTo(File dest) //重新命名此抽象路径名表示的文件
浏览目录中的文件和子目录:
16.public String[] list() //返回此目录中的文件名和目录名的数组
public String[] list(FilenameFilter filter) //返回此目录中满足指定过滤器的文件和目录
17.public File[] listFiles() //返回此目录中的文件和目录的File实例数组
18.public File[] listFiles(FilenameFilter filter)//返回此目录中满足指定过滤器的文件和目录
java.io.FilenameFilter接口:实现此接口的类实例可用于过滤文件名
流的分类
按流向分:
从 文件/网络/内存等(数据源) 到 程序 是"读read"的过程,是"输入input"的过程,
处理这样的事务的类统称为"输入流"类
从 程序 到 文件/网络/内存等(数据源) 是"写write"的过程,是"输出output"的过程,
处理这样的事务的类统称为"输出流"类
按数据处理单位分:
字节流:以字节为单位传输数据的流 8bit = 1byte 处理二进制文件,包括mp3,jpg,exe,doc,ppt,pdf...
以Stream结尾的都是字节流.
字符流:以字符为单位传输数据的流 16bit = 2byte=1char 处理文本文件.txt,.java
以Reader结尾的都是输入字符流
以Writer结尾的都是输出字符流
按功能(层次)分:
节点流:用于直接操作目标设备的流(直接跟数据对话的流,基层干部)
File
String
Array
Pipe
处理流(也叫过滤流):是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更为强大、
灵活的读写功能。(跟其他流对话的流,高级干部)
四大天王
字节流 字符流
InputStream in = System.in;
输入流 InputStream Reader
输出流 OutputStream Writer
字节流/节点流有什么区别?
划分方式不同,前者关注的是按数据传输单位,后者关注的是处理的层次(是否是和数据直接对话)
常用IO流类
四大抽象类
InputStream抽象类
继承自InputStream的流都是用于向程序中输入数据的,且数据的单位为字节(8位)
InputStream的基本方法
public abstract int read() throws IOException
从输入流中读取数据的下一个字节, 返回读到的字节值.若遇到流的末尾,返回-1
public int read(byte[] b) throws IOException
从输入流中读取 b.length 个字节的数据并存储到缓冲区数组b中.返回的是实际读到的字节总数
public int read(byte[] b, int off, int len) throws IOException
读取 len 个字节的数据,并从数组b的off位置开始写入到这个数组中
public void close() throws IOException
关闭此输入流并释放与此流关联的所有系统资源
public int available() throws IOException
返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数
public long skip(long n) throws IOException
跳过和丢弃此输入流中数据的 n 个字节,返回实现路过的字节数。
OutputStream抽象类
继承自OutputStream的流是程序用于向外输出数据的,且数据的单位为字节(8位)
OutputStream基本方法
public abstract void write(int b) throws IOException
将指定的字节写入此输出流
public void write(byte[] b) throws IOException
将 b.length 个字节从指定的 byte 数组写入此输出流
public void write(byte[] b, int off, int len) throws IOException
将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流
public void flush() throws IOException
刷新此输出流并强制写出所有缓冲的输出字节
pulbic void close() throws IOException
关闭此输出流并释放与此流有关的所有系统资源
Reader抽象类
继承自Reader的流都是用于向程序中输入数据的,且数据的单位为字符(16位)
Reader基本方法
public int read() throws IOException
读取单个字符,返回作为整数读取的字符,如果已到达流的末尾返回-1
public int read(char[] cbuf) throws IOException
将字符读入数组,返回读取的字符数
public abstract int read(char[] cbuf, int off, int len) throws IOException
读取 len 个字符的数据,并从数组cbuf的off位置开始写入到这个数组中
public abstract void close() throws IOException
关闭该流并释放与之关联的所有资源
public long skip(long n) throws IOException
跳过n个字符。
int available()
还可以有多少能读到的字节数
Writer抽象类
继承自Writer的流是程序用于向外输出数据的,且数据的单位为字符(16位)
Writer基本方法
public void write(int c) throws IOException
写入单个字符
public void write(char[] cbuf) throws IOException
写入字符数组
public abstract void write(char[] cbuf, int off, int len) throws IOException
写入字符数组的某一部分
public void write(String str) throws IOException
写入字符串
public void write(String str, int off, int len) throws IOException
写字符串的某一部分
public abstract void close() throws IOException
关闭此流,但要先刷新它
public abstract void flush() throws IOException
刷新该流的缓冲,将缓冲的数据全写到目的地
节点流
文件流
文件流主要用来操作文件
JDK提供了4种:
FileInputStream继承自InputStream
FileOutputStream继承自OutputStream
FileOutputStream(String name, boolean append)
FileReader继承自Reader
FileWriter继承自Writer
还提供了一个FileWriter(String fileName, boolean append) 构造方法来指定是否使用追加模式
FileReader的方法
1、构造方法:
FileReader(File file)
FileReader(String fileName)
2、方法:
int read()
int read(char[] cbuf)
int read(char[] cbuf,int off, int len)
void close()
FileWriter的方法
1、构造方法:
FileWriter(File file)
FileWriter(File file,
boolean append)
FileWriter(String fileName)
FileWriter(String fileName,
boolean append)
2、方法:
void write(int c)
void write(char[] cbuf,
int off,
int len)
void write(String str,
int off,
int len)
void flush()
void close()
内存流
内存流主要用来操作内存
ByteArrayInputStream和ByteArrayOutputStream(byte[] toByteArray())
输入和输入可以从文件中来,也可以将设置在内存之上。
ByteArrayInputStream主要完成将内容从内存读入程序之中,而ByteArrayOutputStream的功能主要是将数据写入到内存中。
内存流程操作步骤:
向内存写出:
数据--------->>>ByteArrayOutputStream--------->>>内存
从内存中读取:
数据<<<---------ByteArrayInputStream<<<---------内存
处理流(过滤流)
缓冲流
缓冲流是处理流的一种,建立在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,还增加了一些新的方法
JDK提供四种缓冲流:
BufferedInputStream 可以对任何的InputStream流进行包装
BufferedOutputStream 可以对任何的OutputStream流进行包装
BufferedReader 可以对任何的Reader流进行包装
新增了readLine()方法用于一次读取一行字符串(以‘\r’或‘\n’认为一行结束)返回一行 如果没有返回null
BufferedWriter 可以对任何的Writer流进行包装
新增了newLine()方法用于写入一个行分隔符。
注意:
对于缓冲输出流,写出的数据会先缓存在内存缓冲区中,关闭此流前要用flush()方法将缓存区的数据立刻写出。
关闭过滤流时,会自动关闭过滤流所包装的所有底层流
转换流
在IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换流。
转换流用于在字节流和字符流之间转换。
JDK提供了两种转换流
InputStreamReader:
是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。
InputStreamReader需要和InputStream“套接”,它可以将字节流中读入的字节解码成字符
OutputStreamWriter:
是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变为字节流的输出对象。
OutputStreamWriter需要和OutputStream“套接”,它可以将要写入字节流的字符编码成字节
转换步骤:
写出数据:
程序--->>字符数据--->>字符流--->>OutputStreamWriter(OutputStream)--->>字节流--->>文件
读入数据:
程序<<---字符数据<<---字符流<<----InputStreamReader(InputStream)<<---字节流<<---文件
打印流
PrintStream和PrintWriter都属于输出流,分别针对字节和字符。
PrintStream和PrintWriter类都提供了一系列重载的print和println方法来输出各种类型的数据。
PrintStream和PrintWriter的输出操作不会抛出异常。
System.out就是PrintStream的一个实例。
构造方法
PrintStream(OutputStream out)
PrintStream(OutputStream out, boolean autoFlush)
PrintWriter(Writer out)
PrintWriter(Writer out, boolean autoFlush)
PrintWriter(OutputStream out)
PrintWriter(OutputStream out, boolean autoFlush)
Object流
JDK提供的ObjectOutputStream和ObjectInputStream类是用于存储和读取基本数据类型或对象的过滤流。
用ObjectOutputStream类保存基本数据类型或对象的机制叫序列化
用ObjectInputStream类读取基本数据类型或对象的机制叫反序列化
能被序列化的对象所对应的类必须实现java.io.Serializable这个标识性接口
构造方法
public ObjectOutputStream(OutputStream out) throws IOException
public ObjectInputStream(InputStream in) throws IOException
transient关键字
transient关键字修饰成员变量时,表示这个成员变量是不需要序列化的。
static修饰的成员变量也不会被序列化。
实现了Serializable接口的类都应该生成一个private static final long serialVersionUID 序列化版本ID作为标识。
随机访问流 RandomAccessFile
主要功能是完成随机读取功能,可以读取指定位置的内容。
构造方法:
public RandomAccessFile(File file, String mode)
throws FileNotFoundException
文件的打开模式:
“r” 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
“rw” 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
常用方法
length()
getFilePointer()
skipBytes(int)
seek(long)
read(byte[] b, int off, int len)
write(byte[] b, int off, int len)
writeUTF(String)
writeBytes(String s)
writeChars(String s)
writeBoolean(boolean v)
writeByte(int v)
writeChar(int v)
writeInt(int v)