基本的目录、文件操作,常用的IO输入输出流类介绍和使用。
一、目录及文件操作
Java中File类(文件类)以抽象的方式代表文件名和目录路径名,File对象则代表了磁盘中实际存在的文件和目录。
File类不仅仅提供灵活的构造方法,同时还可以用于文件和目录的创建、文件的查找和文件的删除。
//构造方法
File(File parent, String child) //根据parent抽象路径名和child路径名字符串创建一个新File实例。
File(String pathName) //通过将给定路径名字符串转换为抽象路径名来创建一个新File实例。
File(URI uri) //通过将给定的URI转换为一个抽象路径名来创建一个新的File实例。
//创建方法
createNewFile() //在指定位置创建一个空文件,成功就返回true,如果已存在就不创建然后返回false。
mkdir() //在指定位置创建目录,这只会创建最后一级目录,如果上级目录不存在就抛异常。
mkdirs() //在指定位置创建目录,这会创建路径中所有不存在的目录。
//判断方法
exists() //文件或文件夹是否存在。
isFile() //是否是一个文件,如果不存在,则始终为false。
isDirectory() //是否是一个目录,如果不存在,则始终为false。
//获取方法
String getName() //获取文件或文件夹的名称,不包含上级路径。
String getPath() //返回绝对路径,可以是相对路径,但是目录要指定。
String[] list() //返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。
File[] listFiles() //返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。
二、JAVA中IO流
JAVA中IO流是对数据流向的概括,是数据传输的通道。通过JAVA来调用操作系统IO,实现对磁盘文件的读写操作。
流是个抽象的概念,是对输入输出设备的抽象。根据输入还是输出可以分为输入流和输出流,输入流可以看作一个输入通道,输出流可以看作一个输出通道。输入流是相对程序而言的,外部传入数据给程序需要借助输入流。而程序把数据传输到外部需要借助输出流。
根据传输单位的不同,流又可以分为字节流和字符流。字节流在传输过程中,传输数据的最基本单位是字节。而字符流传输数据的最基本单位是字符。通常字符编码不同,一个字符使用的字节数也不同。在传输方面,计算机的传输本质都是字节。一个字符由多个字节组成,转成字节之前先要去查表转成字节,所以字符流传输时有时候会使用缓冲区。
三、JAVA字节流
字节输入流:
InputStream:是一个抽象类,也是所有基于字节的输入流的超类,抽象了Java的字节输入模型。
int read() //读取一个字节
int read(byte b[]) //最多读取 b.length 长度的字节,并储存到数组 b 中,返回实际读取长度,利用 read() 实现
int read(byte b[], int off, int len) //同上,最多读取 len 个字节,从 off 开始保存
int available() //返回可以读取的字节数目,不受阻塞
long skip(long n) //跳过n个字节
void close() //关闭输入流,并释放与此流有关的所有资源,未实现,方法体为空
synchronized void mark(int readlimit) //标记当前位置,以便可以使用 reset() 方法复位到该标记的位置
synchronized void reset() //将当前位置复位到上次使用 mark() 方法标记的位置,未实现,调用抛出IO异常
boolean markSupported() //判断次输入流是否支持 mark() 和 reset() 方法
SequenceInputStream:表示其他输入流的逻辑串联。从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
// 构造方法
public SequenceInputStream(Enumeration<? extends InputStream> e)
public SequenceInputStream(InputStream s1, InputStream s2)
// 该类中的方法
final void nextStream()
public int available()
public int read()
public int read(byte b[], int off, int len)
public void close()
ByteArrayInputStream:表示字节数组输入流,在内存中创建一个字节数组缓冲区,而字节数组输入流则可以读取该缓冲区的字节数据。
// 构造方法
public ByteArrayInputStream(byte[] a)
public ByteArrayInputStream(byte[] a, int off, int len)
// 操作方法
public int available()
public int read()
public int read(byte b[], int off, int len)
public void mark(int read)
public long skip(long n)
FileInputStream:文件字节输入流,从文件系统中的某个文件中获得输入字节。指对文件数据以字节的形式进行读取操作。
//构造方法
public FileInputStream(File file)
public FileInputStream(String name) //文件通过文件系统路径名指定
//其余读取方法和InputStream基本一致
ObjectInputStream:表示反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象,以流的方式读取对象。一般和FileInputStream一起使用。
//构造方法
public ObjectInputStream(InputStream in)
//操作方法(其余方法多和InputStream类似)
public Object readObject() //从ObjectInputStream读取对象
FilterInputStream:用来封装其它的输入流,并为它们提供额外的功能。本身只是简单重写那些将所有请求传递给所包含输入流的InputStream的所有方法,其子类则进一步重写方法并且提供额外功能。
BufferedInputStream:表示字节缓冲输入流,创建BufferedInputStream时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。相当于为另一个流添加缓冲功能。
//构造方法
public BufferedInputStream(InputStream in)
public BufferedInputStream(InputStream in,int size) //指定缓冲区大小构造缓冲输入流对象
//常用方法
public int read() //缓冲区可能以提前写入了数据内容,读的时候则从缓冲区读入内存
public int read(byte[] b,int off,int len)
DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本Java数据类型。也就是专门用来读各种各样的数据的。(如int、char、long)
//构造方法
public DataInputStream(InputStream in)
//常用方法(其余方法多和InputStream类似)
public final Boolean readBooolean()
public final byte readByte()
public final short readShort()
public final Int readInt()
字节输出流:
OutputStream:是一个抽象类,所有基于字节的输出流的超类。
void write(int b) // 抽象的写入方法
void write(byte b[]) // 写入一个字节数组,利用 write(int b)实现
void write(byte b[], int off, int len) // 写入字节数组的指定位置
void flush() //刷新此输出流并强制写出所有缓冲的输出字节,多用于其子类有用到缓存的时候使用。
void close()
ByteArrayOutputStream:实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。
//构造方法
public ByteArrayOutputStream()
public ByteArrayOutputStream(int size) //创建一个新的 byte 数组输出流,具有指定大小的缓冲区容量。
//常用方法
void write(int b) // 指定的字节写入此byte数组输出流
void write(byte b[], int off, int len) //将指定byte数组中从偏移量off开始的len个字节写入此byte数组输出流。
FileOutputStream:文件输出流是用于将数据写入File或FileDescriptor的输出流,多写入诸如图像数据之类的原始字节的流。
//构造方法
public FileOutputStream(File file) //创建一个向指定File对象表示的文件中写入数据的文件输出流。
public FileOutputStream(File file, boolean append) //同样创建输出文件流,不过append参数true时,数据尾部写入。为false时,数据覆盖原文件。
public FileOutputStream(String name) //创建一个向具有指定名称的文件中写入数据的输出文件流。
//常用方法
public void write(byte[] b) //将b.length个字节从指定byte数组写入此文件输出流中。
public void write(int b) //将指定字节写入此文件输出流。
public void write(byte[] b, int off, int len) //将指定byte数组中从偏移量off开始的len个字节写入此文件输出流。
ObjectOutputStream:表示序列化流,把对象以流的方式写入到文件中保存,实现对象的持久存储。多配合反序列化流一起使用。
//构造方法
public ObjectOutputStream(OutputStream out) //创建写入指定 OutputStream 的 ObjectOutputStream
//常用方法(其余方法多喝OutputStream一样)
public void writeObject(Object obj) //将指定的对象写入ObjectOutputStream
FilterOutputStream:和FilterInputStre功能一样,用来封装其它的输出流,并为它们提供额外的功能。
DataOutputStream:数据输出流允许应用程序以适当方式将基本Java数据类型写入输出流中。
//构造方法
public DataOutputStream(OutputStream out) //创建一个新的数据输出流,将数据写入指定基础输出流
//常用方法
public void writeBoolean(boolean v) //将一个 boolean值以1byte值形式写入基础输出流
public void writeChar(int v) //将一个char值以2byte值形式写入基础输出流中,先写入高字节
public void writeInt(int v) //将一个int值以4byte值形式写入基础输出流中,先写入高字节
public void flush() // 刷新此输出流并强制写出所有缓冲的输出字节
PrintStream:为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。且永远不会抛出IOException。与DataOutputStream不同的是PrintStream打印的所有字符都使用平台的默认字符编码转换为字节。
//构造方法
public PrintStream(File file) //创建具有指定文件且不带自动行刷新的新打印流。
PrintStream(OutputStream out) //创建新的打印流。
//常用方法(write方法和OutputStream基本一样)
public PrintStream append(char c) //将指定字符添加到此输出流。
public void print(T t) //打印t,类型可以是boolean、int、char等
public void println(T t) //打印时会写入行分隔符字符串终止当前行。
BufferedOutputStream:该类实现缓冲的输出流。设置这种输出流,应用程序先将数据写入缓冲区,而不必针对每次字节写入调用底层系统。
//构造方法
public BufferedOutputStream(OutputStream out) //创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
public BufferedOutputStream(OutputStream out, int size) //创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。
//常用方法
public void flush() //刷新此缓冲的输出流
public void write(byte[] b, int off, int len) //将指定byte数组中从偏移量off开始的len个字节写入此缓冲的输出流
public void write(int b) //将指定的字节写入此缓冲的输出流
四、JAVA字符流
字符输入流:
Reader:用于读取字符流的抽象类,子类则必须实现read(char[], int, int)和close()方法。
//构造方法
protected Reader() //创建一个新的字符流reader,其重要部分将同步其自身的reader。
protected Reader(Object lock) //创建一个新的字符流 reader,其重要部分将同步给定的lock对象。
//常用方法
public int read(CharBuffer target) //试图将字符读入指定的字符缓冲区。
public int read() //读取单个字符。
public int read(char cbuf[]) //将字符读入数组
abstract public int read(char cbuf[], int off, int len) //将字符读入数组的某一部分
abstract public void close() //关闭该流并释放与之关联的所有资源。
BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
//构造方法
public BufferedReader(Reader in) //创建一个使用默认大小输入缓冲区的缓冲字符输入流
public BufferedReader(Reader in, int sz) // 创建一个使用指定大小输入缓冲区的缓冲字符输入流
//常用方法
public String readLine() //读取一个文本行。
public int read()
public int read(char cbuf[], int off, int len)
public void close()
InputStreamReader:是字节流通向字符流的桥梁,它使用指定的Charset读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。 每次调用read()方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。可以和BufferedReader配合使用提高效率。
//构造方法
public InputStreamReader(InputStream in) // 创建一个使用默认字符集的 InputStreamReader
public InputStreamReader(InputStream in, Charset cs) //创建使用给定字符集的InputStreamReader
public InputStreamReader(InputStream in, CharsetDecoder dec) //创建使用给定字符集解码器的InputStreamReader
//常用方法
public int read()
public int read(char cbuf[], int off, int len)
public void close()
public String getEncoding() //返回此流使用的字符编码的名称
FileReader:用来读取字符文件的类,此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。底层实现由FileInputStream和InputStreamReader来完成,因此指定特殊值,可自行构造设置。
//构造方法
public FileReader(File file) //在给定从中读取数据的File的情况下创建一个新FileReader
public FileReader(String fileName) //在给定从中读取数据的文件名的情况下创建一个新FileReader
//其他方法和Reader基本一样
字符输出流:
Writer:用于写入字符流的抽象类,子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。字符流多用到缓存,如果写入没有调用flush()方法或者close()方法,则可能部分内容还在缓存区没写入文件,导致写入丢失问题。
//构造方法
protected Writer() //创建一个新的字符流writer,其关键部分将同步writer自身
protected Writer(Object lock) //创建一个新的字符流writer,其关键部分将同步给定的对象。
//常用方法
public void write(char[] cbuf) //写入字符数组
public void write(char[] cbuf, int off, int len) //写入字符数组的某一部分
public void write(String str) //写入字符串
public void write(int c) //写入单个字符。
public Writer append(char c) //将指定字符添加到此writer,可以一直追加
public abstract void flush() //刷新该流的缓冲
public abstract void close() //关闭此流,一般关闭前会自动刷新
PrintWriter:向文本输出流打印对象的格式化表示形式。
//构造方法
public PrintWriter(File file) //使用指定文件创建不具有自动行刷新的新PrintWriter
public PrintWriter(OutputStream out) //根据现有的OutputStream创建不带自动行刷新的新PrintWriter
public PrintWriter(OutputStream out, boolean autoFlush) //当autoFlush为true,则println、printf或format方法将刷新输出缓冲区
//常用方法
public PrintWriter format(String format, Object... args) //使用指定格式字符串和参数将一个格式化字符串写入此writer中。
public void print(T t) //打印t值,T的类型可以为int、long、char等
public void println() //打印值,并终止该行
BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
//构造方法
public BufferedWriter(Writer out) //创建一个使用默认大小输出缓冲区的缓冲字符输出流
public BufferedWriter(Writer out, int sz) //创建一个使用给定大小输出缓冲区的新缓冲字符输出流
//常用方法
public void newLine() //写入一个行分隔符
public void write(char[] cbuf, int off, int len) //写入字符数组的某一部分
public void write(int c) //写入单个字符。
public void flush() //刷新该流的缓冲
public void close() //关闭此流
OutputStreamWriter:是字符流通向字节流的桥梁,可使用指定的Charset将要写入流中的字符编码成字节。使用的字符集可以由名称指定或显式给定。
//构造方法
public OutputStreamWriter(OutputStream out) //创建使用默认字符编码的OutputStreamWriter
public OutputStreamWriter(OutputStream out, Charset cs) //创建使用给定字符集的OutputStreamWriter
//常用方法(基本和Writer一致)
FileWriter:用来写入字符文件的类,此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。底层由FileOutputStream加上OutputStreamWriter实现。因此也可以自行构造设置相关参数。
//构造方法
public FileWriter(File file) //根据给定的File对象构造一个FileWriter对象
public FileWriter(String fileName) //根据给定的文件名构造一个FileWriter对象
//常用方法(基本和Writer一致)
标签:文件,JAVA,字节,字符,int,void,写入,IO,public
From: https://www.cnblogs.com/idempotent/p/12147083.html