Java I/O
1 Java 文件I/O
在JDK 1.0开始就在java.io包中提供了文件的输入输出API,包括访问文件与目录,读写二进制格式和文本格式读写文件,对象序列化。在JDK1.4又引入了新I/O,在java.noi包下提供了通道,缓冲区。后来在JDK7中,又提供了很多新的支持类,Path,文件系系统等等。
1.1 Java BIO中的文件I/O
大家知道BIO是面向流的I/O,流又可以分为用来处理二进制数据的字节流和用来处理字符编码(Unnicode)数据的文本数据的字符流。相应的,用来处理字节流接口就是InputStream和OutputStream,处理字符流的接口就是Reader和Writer.
1.1.1 字节流
输入流
InputStream
这个抽象类是表示输入字节流的所有类的超类。
需要定义InputStream子类的应用程序必须始终提供返回下一个输入字节的方法。
修饰符和返回值 |
方法 |
描述 |
int |
available() |
返回可从此输入流读取(或跳过)的字节数的估计值,而不会被此输入流的下一次方法调用阻塞。 |
void |
close() |
关闭此输入流并释放与该流关联的任何系统资源。 |
void |
mark(int readlimit) |
标记此输入流中的当前位置。 |
boolean |
markSupported() |
测试此输入流是否支持标记和重置方法。 |
abstract int |
read() |
从输入流中读取下一个字节的数据。 |
int |
read(byte[] b) |
从输入流中读取一定数量的字节,并将其存储到缓冲区数组b中。 |
int |
read(byte[] b, int off, int len) |
将输入流中最多len字节的数据读取到字节数组中。 |
void |
reset() |
将此流重新定位到上次在此输入流上调用标记方法时的位置。 |
long |
skip(long n) |
跳过并丢弃此输入流中的n字节数据。 |
AudioInputStream
音频输入流是具有指定音频格式和长度的输入流。长度以样本帧表示,而不是字节。提供了几种方法,用于从流中读取特定数量的字节或未指定数量的字节。音频输入流跟踪读取的最后一个字节。您可以跳过任意数量的字节,以到达稍后的位置进行读取。音频输入流可以支持标记。当您设置标记时,会记住当前位置,以便您稍后可以返回该位置。
AudioSystem类包含许多操作AudioInputStream对象的方法。例如,这些方法允许您:
- 从外部音频文件、流或URL获取音频输入流
- 从音频输入流写入外部文件
- 将音频输入流转换为不同的音频格式
构造方法 |
描述 |
AudioInputStream(InputStream stream, AudioFormat format, long length) |
使用指定输入流中的音频数据,构造样本帧中具有请求格式和长度的音频输入流。 |
AudioInputStream(TargetDataLine line) |
构造一个音频输入流,从指示的目标数据线读取其数据。 |
ByteArrayInputStream
ByteArrayInputStream包含一个内部缓冲区,其中包含可以从流中读取的字节。内部计数器跟踪读取方法提供的下一个字节。
关闭ByteArrayInputStream无效。该类中的方法可以在流关闭后调用,而不会生成IOException。
FileInputStream
FileInputStream从文件系统中的文件获取输入字节。可用的文件取决于主机环境。
FileInputStream用于读取原始字节流,如图像数据。要读取字符流,请考虑使用FileReader。
构造方法 |
描述 |
FileInputStream(File file) |
通过打开到实际文件的连接来创建FileInputStream,该文件由文件系统中的file对象文件命名。 |
FileInputStream(FileDescriptor fdObj) |
使用文件描述符fdObj创建FileInputStream,它表示到文件系统中实际文件的现有连接。 |
FileInputStream(String name) |
通过打开到实际文件的连接来创建FileInputStream,该文件由文件系统中的路径名命名。 |
File
文件和目录路径名的抽象表示。
用户界面和操作系统使用依赖于系统的路径名字符串来命名文件和目录。此类提供了分层路径名的抽象、独立于系统的视图。抽象路径名有两个组件:
- 可选的系统相关前缀字符串,如磁盘驱动器说明符、UNIX根目录的“/”或Microsoft Windows UNC路径名的“\\”,以及
- 零个或多个字符串名称的序列。
路径分隔符
UNIX中是冒号:,例如:.:%JAVA_HOME%/lib:%JAVA_HOME%/lib/tools.jar:%JAVA_HOME%/jre/lib/rt.jar:
Windows中是分号:;,例如:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\rt.jar;
文件名称分隔符
UNIX中是正斜线/,例如:/jre/lib/rt.jar
Windows中是标准是反斜线\(正斜线也支持),例如:\jre\lib\rt.jar
UNC路径
UNC(Universal Naming Convention),通用命名规则。UNC是Windows为网络(主要指局域网)上资源赋予的完整的通用名称。
UNC的格式:\servername\sharename,其中servername是服务器名。sharename是共享资源的名称。例如网上邻居中的共享文件就是用UNC来命名的。
路径前缀
前缀概念用于处理UNIX平台上的根目录,以及Microsoft Windows平台上的驱动器说明符、根目录和UNC路径名,如下所示:
对于UNIX平台,绝对路径名的前缀始终为“/”。相对路径名没有前缀。表示根目录的抽象路径名具有前缀“/”和空名称序列。
对于Microsoft Windows平台,包含驱动器说明符的路径名前缀由驱动器号后跟“:”组成,如果路径名是绝对的,则可能后跟“\”。UNC路径名的前缀为“\\”;主机名和共享名是名称序列中的前两个名称。未指定驱动器的相对路径名没有前缀。
规范路径(Cononical Path)
绝对路径的标准表示法。例如C:\a\b\c…\d和C:\a\b\d表示的是同一个绝对路径,后者就是规范路径,前者就不是。
修饰符和返回值 |
方法 |
描述 |
boolean |
canExecute() |
测试应用程序是否可以执行此抽象路径名表示的文件。 |
boolean |
canRead() |
测试应用程序是否可以读取此抽象路径名表示的文件。 |
boolean |
canWrite() |
测试应用程序是否可以修改此抽象路径名表示的文件。 |
int |
compareTo(File pathname) |
按词典顺序比较两个抽象路径名。 |
boolean |
createNewFile() |
当且仅当具有此名称的文件尚不存在时,原子地创建一个新的、由该抽象路径名命名的空文件。 |
static File |
createTempFile(String prefix, String suffix) |
在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。 |
static File |
createTempFile(String prefix, String suffix, File directory) |
在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 |
boolean |
delete() |
删除此抽象路径名表示的文件或目录。 |
void |
deleteOnExit() |
请求在虚拟机终止时删除此抽象路径名表示的文件或目录。 |
boolean |
equals(Object obj) |
测试此抽象路径名是否与给定对象相等。 |
boolean |
exists() |
测试此抽象路径名表示的文件或目录是否存在。 |
File |
getAbsoluteFile() |
返回此抽象路径名的绝对形式。 |
String |
getAbsolutePath() |
返回此抽象路径名的绝对路径名字符串。 |
File |
getCanonicalFile() |
返回此抽象路径名的规范形式。 |
String |
getCanonicalPath() |
返回此抽象路径名的规范路径名字符串。 |
long |
getFreeSpace() |
返回此抽象路径名命名的分区中未分配的字节数。 |
String |
getName() |
返回由该抽象路径名表示的文件或目录的名称。 |
String |
getParent() |
返回此抽象路径名的父目录的路径名字符串,如果此路径名未命名父目录,则返回null。 |
File |
getParentFile() |
返回此抽象路径名的父目录的抽象路径名,如果此路径名未命名父目录,则返回null。 |
String |
getPath() |
将此抽象路径名转换为路径名字符串。 |
long |
getTotalSpace() |
返回此抽象路径名命名的分区的大小。 |
long |
getUsableSpace() |
返回此抽象路径名命名的分区上此虚拟机可用的字节数。 |
int |
hashCode() |
计算此抽象路径名的哈希代码。 |
boolean |
isAbsolute() |
测试此抽象路径名是否为绝对路径名。 |
boolean |
isDirectory() |
测试此抽象路径名表示的文件是否为目录。 |
boolean |
isFile() |
测试此抽象路径名表示的文件是否为正常文件。 |
boolean |
isHidden() |
测试此抽象路径名命名的文件是否为隐藏文件。 |
long |
lastModified() |
返回此抽象路径名表示的文件上次修改的时间。 |
long |
length() |
返回此抽象路径名表示的文件长度。 |
String[] |
list() |
返回一个字符串数组,命名此抽象路径名表示的目录中的文件和目录。 |
String[] |
list(FilenameFilter filter) |
返回一个字符串数组,用于命名此抽象路径名表示的目录中满足指定筛选器的文件和目录。 |
File[] |
listFiles() |
返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。 |
File[] |
listFiles(FileFilter filter) |
返回一个抽象路径名数组,表示该抽象路径名表示的目录中满足指定筛选器的文件和目录。 |
File[] |
listFiles(FilenameFilter filter) |
返回一个抽象路径名数组,表示该抽象路径名表示的目录中满足指定筛选器的文件和目录。 |
static File[] |
listRoots() |
列出可用的文件系统根目录。 |
boolean |
mkdir() |
创建以此抽象路径名命名的目录。 |
boolean |
mkdirs() |
创建由该抽象路径名命名的目录,包括任何必要但不存在的父目录。 |
boolean |
renameTo(File dest) |
重命名此抽象路径名表示的文件。 |
boolean |
setExecutable(boolean executable) |
一种方便的方法,用于设置所有者对此抽象路径名的执行权限。 |
boolean |
setExecutable(boolean executable, boolean ownerOnly) |
为此抽象路径名设置所有者或每个人的执行权限。 |
boolean |
setLastModified(long time) |
设置此抽象路径名命名的文件或目录的上次修改时间。 |
boolean |
setReadable(boolean readable) |
一种方便的方法,用于设置所有者对此抽象路径名的读取权限。 |
boolean |
setReadable(boolean readable, boolean ownerOnly) |
设置所有者或每个人对此抽象路径名的读取权限。 |
boolean |
setReadOnly() |
标记此抽象路径名命名的文件或目录,以便只允许读取操作。 |
boolean |
setWritable(boolean writable) |
一种方便的方法,用于设置此抽象路径名的所有者写入权限。 |
boolean |
setWritable(boolean writable, boolean ownerOnly) |
设置此抽象路径名的所有者或所有人的写入权限。 |
Path |
toPath() |
返回从此抽象路径构造的java.nio.file.Path对象。 |
String |
toString() |
返回此抽象路径名的路径名字符串。 |
URI |
toURI() |
构造表示此抽象路径名的file:URI。 |
URL |
toURL() |
已弃用。此方法不会自动转义URL中非法的字符。建议新代码如果要将抽象路径名转换为URL,首先通过toURI方法将其转换为URI,然后通过URI.toURL方法将URI转换为URL。 |
PipedInputStream
管道输入流应连接到管道输出流;管道输入流然后提供写入管道输出流的任何数据字节。通常,一个线程从PipedInputStream对象读取数据,另一个线程将数据写入相应的PipedOutputStreet。不建议尝试从单个线程使用这两个对象,因为这可能会使线程死锁。管道输入流包含一个缓冲区,在限制范围内将读取操作与写入操作解耦。如果向连接的管道输出流提供数据字节的线程不再活动,则管道被称为断开。
构造方法 |
描述 |
PipedInputStream() |
创建PipedInputStream,使其尚未连接。 |
PipedInputStream(int pipeSize) |
创建PipedInputStream,使其尚未连接,并使用指定的管道大小作为管道缓冲区。 |
PipedInputStream(PipedOutputStream src) |
创建PipedInputStream,以便它连接到管道输出流src。 |
PipedInputStream(PipedOutputStream src, int pipeSize) |
创建一个PipedInputStream,以便它连接到管道输出流src,并为管道的缓冲区使用指定的管道大小。 |
FilterInputStream
FilterInputStream包含其他一些输入流,并将它们用作基本数据源,可能会转换数据或提供其他功能。类FilterInputStream重写InputStriam的所有方法,只是简单地用将所有请求传递给包含的输入流。FilterInputStream的子类可以进一步覆盖这些方法中的一些,还可以提供额外的方法和字段。
构造方法 |
描述 |
protected FilterInputStream(InputStream in) |
通过将参数in赋值给this.in字段来创建FilterInputStream,以便记住它以便以后使用。 |
SequenceInputStream
SequenceInputStream表示其他输入流的逻辑连接。它从输入流的有序集合开始,从第一个流开始读取,直到到达文件结尾,然后从第二个流开始,以此类推,直到最后一个包含的输入流到达文件结尾。
构造方法 |
描述 |
SequenceInputStream(Enumeration<? extends InputStream> e) |
通过记住参数来初始化新创建的SequenceInputStream,该参数必须是生成运行时类型为InputStriam的对象的枚举。 |
SequenceInputStream(InputStream s1, InputStream s2) |
通过记住两个参数来初始化新创建的SequenceInputStream,这两个参数将按顺序读取,首先是s1,然后是s2,以提供要从此SequenceInputStream读取的字节。 |
StringBufferInputStream
已弃用。此类无法将字符正确转换为字节。从JDK1.1开始,从字符串创建流的首选方法是通过StringReader类。
ObjectInputStream
ObjectInputStream用来反序列化由ObjectOutputStream写入的原始数据和对象。当分别与FileOutputStream和FileInputStreet一起使用时,ObjectOutput流和ObjectInput流可以为应用程序提供对象图形的持久存储。ObjectInputStream用于恢复以前序列化的对象。其他用途包括使用套接字流在主机之间传递对象,或在远程通信系统中封送和取消封送参数和参数。
构造方法 |
描述 |
protected |
ObjectInputStream() |
ObjectInputStream(InputStream in) |
创建从指定的InputStream读取的ObjectInputStream。 |
修饰符和返回值 |
方法 |
描述 |
void |
defaultReadObject() |
从此流中读取当前类的非静态和非瞬态字段。 |
protected boolean |
enableResolveObject(boolean enable) |
启用流以允许替换从流中读取的对象。 |
protected ObjectStreamClass |
readClassDescriptor() |
从序列化流中读取类描述符。 |
ObjectInputStream.GetField |
readFields() |
从流中读取持久字段,并按名称使其可用。 |
void |
readFully(byte[] buf) |
读取字节,阻塞直到读取所有字节。 |
void |
readFully(byte[] buf, int off, int len) |
读取字节,阻塞直到读取所有字节。 |
Object |
readObject() |
从ObjectInputStream读取对象。 |
protected Object |
readObjectOverride() |
此方法由ObjectInputStream的受信任子类调用,该子类是使用保护的无参数构造函数构造的ObjectInputStream对象。 |
protected void |
readStreamHeader() |
提供readStreamHeader方法是为了允许子类读取和验证自己的流头。它读取并校验魔数和版本号。 |
Object |
readUnshared() |
从ObjectInputStream读取“非共享”对象。 |
void |
registerValidation(ObjectInputValidation obj, int prio) |
在返回图形之前注册要验证的对象。 |
protected Class<?> |
resolveClass(ObjectStreamClass desc) |
加载与指定流类描述等效的本地类。 |
protected Object |
resolveObject(Object obj) |
此方法将允许ObjectInputStream的受信任子类在反序列化期间用一个对象替换另一个对象。 |
protected Class<?> |
resolveProxyClass(String[] interfaces) |
返回实现在代理类描述符中命名的接口的代理类;子类可以实现此方法,以便从流中读取自定义数据以及动态代理类的描述符,从而允许它们为接口和代理类使用备用加载机制。 |
DataInput
DataInput接口提供从二进制流中读取字节并从中重构任何Java原语类型的数据。还有一个用于从modified UTF-8格式的数据中重构字符串的工具。
这个接口中的所有读取例程通常都是正确的,如果在读取所需的字节数之前到达文件末尾,则会抛出EOFException(它是IOException的一种)。如果由于文件结尾以外的任何原因无法读取任何字节,则抛出EOFException以外的IOException。特别是,如果输入流已关闭,可能会引发IOException。
修饰符和返回值 |
方法 |
描述 |
boolean |
readBoolean() |
读取一个输入字节,如果该字节非零,则返回true;如果该字节为零,则为false。 |
byte |
readByte() |
读取并返回一个输入字节。 |
char |
readChar() |
读取两个输入字节并返回一个字符值。 |
double |
readDouble() |
读取八个输入字节并返回一个双精度值。 |
float |
readFloat() |
读取四个输入字节并返回浮点值。 |
void |
readFully(byte[] b) |
从输入流中读取一些字节,并将它们存储到缓冲区数组b中。 |
void |
readFully(byte[] b, int off, int len) |
从输入流读取len字节。 |
int |
readInt() |
读取四个输入字节并返回一个int值。 |
String |
readLine() |
从输入流中读取下一行文本。 |
long |
readLong() |
读取八个输入字节并返回一个长值。 |
short |
readShort() |
读取两个输入字节并返回一个短值。 |
int |
readUnsignedByte() |
读取一个输入字节,将其零扩展(zero-extends)为int类型,并返回结果,因此其范围为0到255。 |
int |
readUnsignedShort() |
读取两个输入字节并返回0到65535范围内的int值。 |
String |
readUTF() |
读取使用modified UTF-8格式编码的字符串。 |
int |
skipBytes(int n) |
尝试跳过输入流中n个字节的数据,丢弃跳过的字节。 |
BufferedInputStream
BufferedInputStream为另一个输入流添加了功能,即缓冲输入并支持标记和重置方法的能力。创建BufferedInputStream时,将创建一个内部缓冲区数组。当读取或跳过流中的字节时,根据需要从包含的输入流中重新填充内部缓冲区,一次填充许多字节。标记操作记住输入流中的一个点,并且重置操作导致在从包含的输入流中获取新字节之前重新读取自最近标记操作以来读取的所有字节。
构造方法 |
描述 |
BufferedInputStream(InputStream in) |
创建BufferedInputStream并将其参数InputStream in保存起来,以供以后使用。 |
BufferedInputStream(InputStream in, int size) |
创建具有指定缓冲区大小的BufferedInputStream,并将其参数InputStream in保存起来,以供以后使用。 |
CheckedInputStream
一种输入流,它还维护正在读取的数据的校验和。然后可以使用校验和来验证输入数据的完整性。
构造方法 |
描述 |
CheckedInputStream(InputStream in, Checksum cksum) |
使用指定的校验和创建输入流。 |
CipherInputStream
CipherInputStream由一个InputStream和一个Cipher组成,因此read()方法返回从底层InputStream读入但由Cipher额外处理的数据。在由CipherInputStream使用之前,必须完全初始化Cipher。
例如,如果为解密而初始化了密码,则在返回解密数据之前,CipherInputStream将尝试读入数据并对其进行解密。
构造方法 |
描述 |
protected |
CipherInputStream(InputStream is) |
CipherInputStream(InputStream is, Cipher c) |
从InputStream和Cipher构造CipherInputStream。 |
DigestInputStream
一种透明流,使用流经该流的比特来更新相关联的消息摘要。
要完成消息摘要计算,请在调用该摘要输入流的一个读取方法之后,调用关联消息摘要的一个摘要方法。
可以打开或关闭摘要功能。当它打开时,对其中一个read方法的调用将导致消息摘要的更新。但当它关闭时,消息摘要不会更新。默认情况下,处于打开状态。
请注意,摘要对象只能计算一个摘要(请参见MessageDigest),因此为了计算中间摘要,调用者应该保留摘要对象的句柄,并为要计算的每个摘要克隆它,而不影响原始摘要。
构造方法 |
描述 |
DigestInputStream(InputStream stream, MessageDigest digest) |
使用指定的输入流和消息摘要创建摘要输入流。 |
InflaterInputStream
此类实现了一个流过滤器,用于以“deflate”压缩格式解压缩数据。它还用作其他解压缩过滤器的基础,如GZIPInputStream。
DEFLATE
无损数据压缩算法。
DEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。
它最初是由Phil Katz为他的PKZIP归档工具第二版所定义的,后来定义在RFC 1951规范中。
人们普遍认为DEFLATE不受任何专利所制约,并且在LZW(GIF文件格式使用)相关的专利失效之前,这种格式除了在ZIP文件格式中得到应用之外也在gzip压缩文件以及PNG图像文件中得到了应用。
DEFLATE压缩与解压的源代码可以在自由、通用的压缩库zlib上找到。
更高压缩率的DEFLATE是7-zip所实现的。AdvanceCOMP也使用这种实现,它可以对gzip、PNG、MNG以及ZIP文件进行压缩从而得到比zlib更小的文件大小。在Ken Silverman的KZIP与PNGOUT中使用了一种更加高效同时要求更多用户输入的DEFLATE程序。
构造方法 |
描述 |
InflaterInputStream(InputStream in) |
使用默认解压缩器和缓冲区大小创建新的输入流。 |
InflaterInputStream(InputStream in, Inflater inf) |
使用指定的解压缩器和默认缓冲区大小创建新的输入流。 |
InflaterInputStream(InputStream in, Inflater inf, int size) |
使用指定的解压缩器和缓冲区大小创建新的输入流。 |
GZIPInputStream
此类实现了一个流过滤器,用于读取GZIP文件格式的压缩数据。
构造方法 |
描述 |
GZIPInputStream(InputStream in) |
使用默认缓冲区大小创建一个新的GZIPInputStream。 |
GZIPInputStream(InputStream in, int size) |
使用指定缓冲区大小创建一个新的GZIPInputStream。 |
ZipInputStream
此类实现了用于读取ZIP文件格式文件的输入流过滤器。包括对压缩和未压缩条目的支持。
构造方法 |
描述 |
ZipInputStream(InputStream in) |
创建一个新的ZipInputStream。 |
ZipInputStream(InputStream in, Charset charset) |
创建一个新的ZipInputStream。 |
修饰符和返回值 |
方法 |
描述 |
void |
closeEntry() |
关闭当前ZIP条目并定位流以读取下一个条目。 |
protected ZipEntry |
createZipEntry(String name) |
为指定的条目名称创建新的ZipEntry对象。 |
ZipEntry |
getNextEntry() |
读取下一个ZIP文件条目,并将流定位在条目数据的开头。 |
gip和zip的区别
比较项 |
gzip |
zip |
多文件压缩 |
不支持。需要先用tar将多个文件打包成一个文件,然后使用gzip压缩 |
支持直接压缩多个文件,是一种相当简单的分别压缩每个文件的存档格式。分别压缩文件允许不必读取另外的数据而检索独立的文件。 |
操作系统支持 |
常用于Unix和Linux |
Unix和Linux,Windows |
文件格式 |
.gz |
.zip |
应用 |
应用广泛,如网络文件传输时提升传输效率,http协议支持application/gzip |
应该广泛,如网络文件传输时提升传输效率,http协议支持application/zip |
JarInputStream
JarInputStream类用于从任何输入流读取JAR文件的内容。它扩展了类java.util.zip.ZipInputStream支持读取可选的清单条目。Manifest可用于存储有关JAR文件及其条目的元信息。
构造方法 |
描述 |
JarInputStream(InputStream in) |
创建一个新的JarInputStream并读取可选清单。 |
JarInputStream(InputStream in, boolean verify) |
创建一个新的JarInputStream并读取可选清单。 |
修饰符和返回值 |
方法 |
:- |
:- |
Manifest |
getManifest() |
JarEntry |
getNextJarEntry() |
LineNumberInputStream
已弃用。
此类错误地假定字节足以表示字符。从JDK 1.1开始,对字符流进行操作的首选方式是通过新的字符流类,其中包括一个用于计算行号的类。
此类是一个输入流过滤器,它提供了跟踪当前行号的附加功能。
行是以回车符(“\r”)、换行符(“\n”)或回车符紧跟换行符结尾的字节序列。在所有三种情况下,行终止字符都作为一个换行符返回。
行号从0开始,当读取返回换行符时,行号递增1。
构造方法 |
描述 |
LineNumberInputStream(InputStream in) |
构造从指定输入流读取其输入的换行号输入流。 |
修饰符和返回值 |
方法 |
描述 |
int |
getLineNumber() |
返回当前行号。 |
ProgressMonitorInputStream
Swing的组件。监视从某些InputStream读取的进度。这将创建一个进度监视器来监视读取输入流的进度。如果需要一段时间,将弹出ProgressDialog通知用户。如果用户点击Cancel(取消)按钮,则在下次读取时将抛出InterruptedIOException(中断IO异常)。所有正确的清理工作都在流关闭时完成。
PushBackInputStream
PushbackInputStream为另一个输入流添加了功能,即“回推”或“未读”一个字节的能力。这在代码片段方便读取由特定字节值分隔的不确定数量的数据字节的情况下很有用;在读取终止字节之后,代码片段可以“读取”它,这样输入流上的下一个读取操作将重新读取被推回的字节。
构造方法 |
描述 |
PushbackInputStream(InputStream in) |
创建一个PushbackInputStream并将其参数InputStream in保存,以供以后使用。 |
PushbackInputStream(InputStream in, int size) |
使用指定大小的回推缓冲区创建一个PushbackInputStream,并将其参数InputStream in保存,以供以后使用。 |
修饰符和返回值 |
方法 |
描述 |
void |
unread(byte[] b) |
通过将字节数组复制到回推缓冲区的前面,将其回推。 |
void |
unread(byte[] b, int off, int len) |
通过将字节数组的一部分复制到回推缓冲区的前面,将其回推。 |
void |
unread(int b) |
通过将字节复制到回推缓冲区的前面,将其回推。 |
输出流
OutputStream
这个抽象类是表示字节输出流的所有类的超类。输出流接受输出字节并将它们发送到某个接收器。
需要定义OutputStream子类的应用程序必须始终至少提供一个写入一个字节输出的方法。
修饰符和返回值 |
方法 |
描述 |
void |
close() |
关闭此输出流并释放与此流关联的任何系统资源。 |
void |
flush() |
刷新此输出流并强制写出任何缓冲的输出字节。 |
void |
write(byte[] b) |
将指定字节数组中的b.length字节写入此输出流。 |
void |
write(byte[] b, int off, int len) |
将指定字节数组中的len字节从偏移开始写入此输出流。 |
abstract void |
write(int b) |
将指定的字节写入此输出流。 |
ByteArrayOutputStream
此类实现了一个输出流,其中数据被写入字节数组。缓冲区在写入数据时会自动增长。可以使用toByteArray()和toString()检索数据。
关闭ByteArrayOutputStream无效。可以在流关闭后调用此类中的方法,而不生成IOException。
构造方法 |
描述 |
ByteArrayOutputStream() |
创建新的字节数组输出流。 |
ByteArrayOutputStream(int size) |
创建一个新的字节数组输出流,其缓冲区容量为指定大小(以字节为单位)。 |
修饰符和返回值 |
方法 |
描述 |
void |
reset() |
将此字节数组输出流的计数字段重置为零,以便丢弃输出流中当前累积的所有输出 |
int |
size() |
返回缓冲区的当前大小。 |
byte[] |
toByteArray() |
创建新分配的字节数组。 |
String |
toString() |
使用平台的默认字符集将缓冲区的内容转换为解码字节的字符串。已弃用。此方法无法将字节正确转换为字符。从JDK1.1开始,首选的方法是使用toString(String-enc)方法,该方法采用编码名称参数,或者toString()方法,使用平台的默认字符编码。 |
String |
toString(String charsetName) |
通过使用命名字符集对字节进行解码,将缓冲区的内容转换为字符串。 |
FileOutputStream
文件输出流是用于将数据写入文件或FileDescriptor的输出流。文件是否可用或是否可以创建取决于底层平台。特别是一些平台,一次只允许一个FileOutputStream(或其他文件写入对象)打开文件进行写入。在这种情况下,如果涉及的文件已经打开,则此类中的构造函数将失败。
FileOutputStream用于写入原始字节流,如图像数据。对于写入字符流,请考虑使用FileWriter。
构造方法 |
描述 |
FileOutputStream(File file) |
创建文件输出流以写入指定文件对象表示的文件。 |
FileOutputStream(File file, boolean append) |
创建文件输出流以写入指定文件对象表示的文件。 |
FileOutputStream(FileDescriptor fdObj) |
创建文件输出流以写入指定的文件描述符,该描述符表示与文件系统中实际文件的现有连接。 |
FileOutputStream(String name) |
创建文件输出流以写入具有指定名称的文件。 |
FileOutputStream(String name, boolean append) |
创建文件输出流以写入具有指定名称的文件。 |
修饰符和返回值 |
方法 |
描述 |
protected void |
finalize() |
清理与文件的连接,并确保在不再引用此流时调用此文件输出流的close方法。 |
FileChannel |
getChannel() |
返回与此文件输出流关联的唯一FileChannel对象。 |
FileDescriptor |
getFD() |
返回与此流关联的文件描述符。 |
PipedOutputStream
管道输出流可以连接到管道输入流以创建通信管道。管道输出流是管道的发送端。通常,一个线程将数据写入PipedOutputStream对象,另一个线程从连接的PipedInputStream读取数据。建议不要尝试从单个线程同时使用这两个对象,因为这可能会导致线程死锁。如果正在从连接的管道输入流中读取数据字节的线程不再活动,则称管道已断开。
构造方法 |
描述 |
PipedOutputStream() |
创建尚未连接到管道输入流的管道输出流。 |
PipedOutputStream(PipedInputStream snk) |
创建连接到指定管道输入流的管道输出流。 |
修饰符和返回值 |
方法 |
描述 |
void |
connect(PipedInputStream snk) |
将此管道输出流连接到接收器。 |
FilterOutputStream
这个类是过滤输出流的所有类的超类。这些流位于已经存在的输出流(底层输出流)之上,它将其用作基本的数据汇,但可能会在途中转换数据或提供附加功能。
FilterOutputStream类本身只是用将所有请求传递到基础输出流的版本重写OutputStream的所有方法。FilterOutputStream的子类可以进一步覆盖这些方法中的一些,并提供其他方法和字段。
构造方法 |
描述 |
FilterOutputStream(OutputStream out) |
在指定的基础输出流之上创建输出流筛选器。 |
DataOutput
DataOutput接口用于将任何Java原语类型的数据转换为一系列字节,并将这些字节写入二进制流。还有一种工具可以将字符串转换为修改后的UTF-8格式,并写入生成的一系列字节。
对于此接口中所有写入字节的方法,如果由于任何原因无法写入字节,通常会引发IOException。
修饰符和返回值 |
方法 |
描述 |
void |
write(byte[] b) |
将数组b中的所有字节写入输出流。 |
void |
write(byte[] b, int off, int len) |
按顺序将数组b中的len字节写入输出流。 |
void |
write(int b) |
将参数b的八个低位写入输出流。 |
void |
writeBoolean(boolean v) |
将布尔值写入此输出流。 |
void |
writeByte(int v) |
将参数v的八个低位写入输出流。 |
void |
writeBytes(String s) |
将字符串写入输出流。 |
void |
writeChar(int v) |
将包含两个字节的字符值写入输出流。 |
void |
writeChars(String s) |
按顺序将字符串s中的每个字符写入输出流,每个字符两个字节。 |
void |
writeDouble(double v) |
将包含八个字节的双精度值写入输出流。 |
void |
writeFloat(float v) |
将由四个字节组成的浮点值写入输出流。 |
void |
writeInt(int v) |
将由四个字节组成的int值写入输出流。 |
void |
writeLong(long v) |
将由八个字节组成的长值写入输出流。 |
void |
writeShort(int v) |
将两个字节写入输出流以表示参数的值。 |
void |
writeUTF(String s) |
将两个字节的长度信息写入输出流,后跟字符串s中每个字符的修改的UTF-8表示。 |
ObjectOutput
ObjectOutput扩展了DataOutput接口以包括对象的写入。DataOutput包括用于输出基元类型的方法,ObjectOutput扩展了该接口以包括对象、数组和字符串。
修饰符和返回值 |
方法 |
描述 |
void |
write(byte[] b) |
写入字节数组。 |
void |
write(byte[] b, int off, int len) |
写入字节的子数组。 |
void |
writeObject(Object obj) |
将对象写入底层存储或流。 |
ObjectOutputStream
ObjectOutputStream将Java对象的原始数据类型和图形写入OutputStream。可以使用ObjectInputStream读取(重建)对象。对象的持久存储可以通过使用流的文件来实现。如果流是网络套接字流,则可以在另一个主机或另一个进程中重新构建对象。
仅支持实现了java.io.Serializable 接口的对象。可序列化接口可以写入流。每个可序列化对象的类都被编码,包括类的类名和签名、对象的字段和数组的值以及从初始对象引用的任何其他对象的闭包。
writeObject方法用于将对象写入流。任何对象(包括字符串和数组)都是用writeObject编写的。可以将多个对象或原语写入流。必须以与写入对象相同的类型和顺序从相应的ObjectInputstream中读取对象。
还可以使用DataOutput中的适当方法将原始数据类型写入流。也可以使用writeUTF方法编写字符串。
对象的默认序列化机制写入对象的类、类签名以及所有非瞬时和非静态字段的值。对其他对象的引用(瞬态或静态字段除外)会导致这些对象也被写入。使用引用共享机制对单个对象的多个引用进行编码,以便可以将对象的图形恢复为原始对象时的相同形状。
在序列化和反序列化过程中需要特殊处理的类必须实现具有以下精确签名的特殊方法:
private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException;
private void writeObject(java.io.ObjectOutputStream stream) throws IOException
private void readObjectNoData() throws ObjectStreamException;
writeObject方法负责为其特定类写入对象的状态,以便相应的readObject方法可以还原它。该方法不需要关注属于对象的超类或子类的状态。通过使用writeObject方法或使用DataOutput支持的基元数据类型的方法将各个字段写入ObjectOutputStream来保存状态。
序列化不会写出任何未实现java.io的对象的字段。可串行化接口。不可序列化的对象的子类可以是可序列化的。在这种情况下,不可序列化类必须具有无参数构造函数,以允许初始化其字段。在这种情况下,子类负责保存和恢复不可序列化类的状态。通常情况下,该类的字段是可访问的(public、package或protected),或者可以使用get和set方法来恢复状态。
通过实现引发NotSerializableException的writeObject和readObject方法,可以防止对象的序列化。ObjectOutputStream将捕获异常并中止序列化过程。
实现Externalizable接口允许对象完全控制对象序列化形式的内容和格式。调用Externalizable界面的writeExternal和readExternal方法来保存和还原对象状态。当由类实现时,它们可以使用ObjectOutput和ObjectInput的所有方法写入和读取自己的状态。对象负责处理发生的任何版本控制。
构造方法 |
描述 |
protected |
ObjectOutputStream() |
ObjectOutputStream(OutputStream out) |
创建写入指定OutputStream的ObjectOutputStream。 |
修饰符和返回值 |
方法 |
描述 |
protected void |
annotateClass(Class<?> cl) |
子类可以实现此方法以允许类数据存储在流中。 |
protected void |
annotateProxyClass(Class<?> cl) |
子类可以实现此方法,以将自定义数据与动态代理类的描述符一起存储在流中。 |
void |
defaultWriteObject() |
将当前类的非静态和非瞬态字段写入此流。 |
protected void |
drain() |
排空ObjectOutputStream中的所有缓冲数据。类似于flush,但不会将flush传播到底层的流。 |
protected boolean |
enableReplaceObject(boolean enable) |
启用流可以替换流中的对象。 |
ObjectOutputStream.PutField |
putFields() |
检索字段对象,此对象用于缓冲要写入流的持久字段。当调用writeFields方法时,字段将被写入流。 |
protected Object |
replaceObject(Object obj) |
此方法将允许ObjectOutputStream的受信任子类在序列化期间用一个对象替换另一个对象。 |
void |
reset() |
重置将忽略已写入流的任何对象的状态。 |
void |
useProtocolVersion(int version) |
指定写入流时要使用的流协议版本。 |
void |
writeObject(Object obj) |
将指定的对象写入ObjectOutputStream。 |
protected void |
writeObjectOverride(Object obj) |
子类用于重写默认writeObject方法的方法。 |
protected void |
writeStreamHeader() |
提供了writeStreamHeader方法,以便子类可以将自己的头附加到流中。 |
void |
writeUnshared(Object obj) |
将“非共享”对象写入ObjectOutputStream。 |
void |
writeUTF(String str) |
以修改的UTF-8格式写入此字符串的原始数据。 |
BufferedOutputStream
该类实现缓冲输出流。通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节调用底层系统。
构造方法 |
描述 |
BufferedOutputStream(OutputStream out) |
创建新的缓冲输出流以将数据写入指定的基础输出流。 |
BufferedOutputStream(OutputStream out, int size) |
创建新的缓冲输出流,以将数据写入具有指定缓冲区大小的指定基础输出流。 |
CheckedOutputStream
一种输出流,它还维护正在写入的数据的校验和。然后可以使用校验和来验证输出数据的完整性。
构造方法 |
描述 |
CheckedOutputStream(OutputStream out, Checksum cksum) |
使用指定的校验和创建输出流。 |
修饰符和返回值 |
方法 |
描述 |
Checksum |
getChecksum() |
返回此输出流的校验和。 |
CipherOutputStream
CipherOutputStream由一个OutputStream和一个Cipher组成,因此write()方法在将数据写入底层OutputStream之前首先处理数据。密码在被CipherOutputStream使用之前必须完全初始化。
例如,如果密码被初始化为加密,则CipherOutputStream将在写入加密数据之前尝试加密数据。
该类严格遵守其祖先类java.io的语义,尤其是失败语义。OutputStream和java.io.FilterOutputStream。这个类正好具有在其祖先类中指定的方法,并覆盖所有这些方法。此外,该类捕获其祖先类未引发的所有异常。特别是,此类捕获BadPaddingException和解密过程中完整性检查失败引发的其他异常。这些异常不会被重新抛出,因此不会通知客户端完整性检查失败。由于这种行为,如果应用程序在认证失败时需要显式通知,则此类可能不适合在认证操作模式(例如GCM)下与解密一起使用。这样的应用程序可以直接使用Cipher API作为使用此类的替代方法。
对于使用此类的程序员来说,至关重要的是不要使用未在此类中定义或重写的方法(例如后来添加到某个超级类中的新方法或构造函数),因为这些方法的设计和实现不太可能考虑到CipherOutputStream的安全影响。
构造方法 |
描述 |
protected |
CipherOutputStream(OutputStream os) |
CipherOutputStream(OutputStream os, Cipher c) |
从OutputStream和Cipher构造CipherOutputStream。 |
DigestOutputStream
一种透明流,使用通过流的比特更新相关的消息摘要。
要完成消息摘要计算,请在调用此摘要输出流的一个写入方法之后,对关联的消息摘要调用一个摘要方法。
可以打开或关闭此流(请参见打开)。当它打开时,对其中一个写入方法的调用将导致消息摘要的更新。但当它关闭时,消息摘要不会更新。默认情况下,流处于打开状态。
构造方法 |
描述 |
DigestOutputStream(OutputStream stream, MessageDigest digest) |
使用指定的输出流和消息摘要创建摘要输出流。 |
修饰符和返回值 |
方法 |
描述 |
MessageDigest |
getMessageDigest() |
返回与此流关联的消息摘要。 |
void |
on(boolean on) |
打开或关闭摘要函数。 |
void |
setMessageDigest(MessageDigest digest) |
将指定的消息摘要与此流相关联。 |
String |
toString() |
打印此摘要输出流及其关联消息摘要对象的字符串表示形式。 |
void |
write(byte[] b, int off, int len) |
使用指定的子数组更新消息摘要(如果摘要函数处于启用状态),并在任何情况下将子数组写入输出流。 |
void |
write(int b) |
使用指定的字节更新消息摘要(如果摘要函数打开),并在任何情况下将该字节写入输出流。 |
DeflaterOutputStream
此类实现了一个输出流过滤器,用于以“deflate”压缩格式压缩数据。它也被用作其他类型压缩过滤器的基础,例如GZIPOutputStream。
构造方法 |
描述 |
DeflaterOutputStream(OutputStream out) |
创建具有默认压缩器和缓冲区大小的新输出流。 |
DeflaterOutputStream(OutputStream out, boolean syncFlush) |
创建具有默认压缩器、默认缓冲区大小和指定刷新模式的新输出流。 |
DeflaterOutputStream(OutputStream out, Deflater def) |
使用指定的压缩器和默认缓冲区大小创建新的输出流。 |
DeflaterOutputStream(OutputStream out, Deflater def, boolean syncFlush) |
使用指定的压缩器、刷新模式和默认缓冲区大小创建新的输出流。 |
DeflaterOutputStream(OutputStream out, Deflater def, int size) |
使用指定的压缩器和缓冲区大小创建新的输出流。 |
DeflaterOutputStream(OutputStream out, Deflater def, int size, boolean syncFlush) |
使用指定的压缩器、缓冲区大小和刷新模式创建新的输出流。 |
修饰符和返回值 |
方法 |
描述 |
protected void |
deflate() |
将下一个压缩数据块写入输出流。 |
void |
finish() |
完成将压缩数据写入输出流,而不关闭基础流。 |
void |
flush() |
清空压缩的输出流。 |
PrintStream
PrintStream为另一个输出流添加了功能,即能够方便地打印各种数据值的表示。还提供了两个其他功能。与其他输出流不同,PrintStream从不抛出IOException;相反,异常情况只是设置一个内部标志,可以通过checkError方法进行测试。可选地,可以创建PrintStream以自动刷新;这意味着在写入字节数组、调用println方法之一或写入换行符或字节(“\n”)后,将自动调用flush方法。
PrintStream打印的所有字符都使用平台的默认字符编码转换为字节。PrintWriter类应用于需要写入字符而不是字节的情况。
构造方法 |
描述 |
PrintStream(File file) |
使用指定的文件创建新的打印流,而不自动刷新行。 |
PrintStream(File file, String csn) |
使用指定的文件和字符集创建新的打印流,而不自动刷新行。 |
PrintStream(OutputStream out) |
创建新的打印流。 |
PrintStream(OutputStream out, boolean autoFlush) |
创建新的打印流。 |
PrintStream(OutputStream out, boolean autoFlush, String encoding) |
创建新的打印流。 |
PrintStream(String fileName) |
使用指定的文件名创建新的打印流,而不自动刷新行。 |
PrintStream(String fileName, String csn) |
使用指定的文件名和字符集创建新的打印流,无需自动刷新行。 |
修饰符和返回值 |
方法 |
描述 |
boolean |
checkError() |
刷新流并检查其错误状态。 |
protected void |
clearError() |
清除此流的内部错误状态。 |
PrintStream |
format(Locale l, String format, Object… args) |
使用指定的格式字符串和参数将格式化字符串写入此输出流。 |
PrintStream |
format(String format, Object… args) |
使用指定的格式字符串和参数将格式化字符串写入此输出流。 |
void |
print(String s) |
打印字符串。 |
PrintStream |
printf(Locale l, String format, Object… args) |
使用指定的格式字符串和参数将格式化字符串写入此输出流的方便方法。 |
void |
println(Object x) |
打印对象,然后终止行。 |
DataOutputStream
数据输出流允许应用程序以可移植的方式将原始Java数据类型写入输出流。然后,应用程序可以使用数据输入流将数据读回。
构造方法 |
描述 |
DataOutputStream(OutputStream out) |
创建新的数据输出流以将数据写入指定的基础输出流。 |
修饰符和返回值 |
方法 |
描述 |
int |
size() |
返回写入计数器的当前值,即到目前为止写入此数据输出流的字节数。 |
void |
write(byte[] b, int off, int len) |
将指定字节数组中从偏移量开始的len字节写入基础输出流。 |
void |
write(int b) |
将指定的字节(参数b的低位八位)写入基础输出流。 |
void |
writeBoolean(boolean v) |
将布尔值作为1字节值写入基础输出流。 |
void |
writeByte(int v) |
将一个字节作为1字节值写入基础输出流。 |
void |
writeBytes(String s) |
将字符串作为字节序列写入基础输出流。 |
void |
writeChar(int v) |
将一个字符作为2字节值写入基础输出流,先写入高字节。 |
void |
writeChars(String s) |
将字符串作为字符序列写入基础输出流。 |
void |
writeDouble(double v) |
使用double类中的doubleToLongBits方法将double参数转换为long,然后将该long值作为8字节的量(先是高字节)写入基础输出流。 |
void |
writeFloat(float v) |
使用float类中的floatToIntBits方法将float参数转换为int,然后将该int值作为4字节的量(先是高字节)写入基础输出流。 |
void |
writeInt(int v) |
将int作为四个字节写入基础输出流,先写入高字节。 |
void |
writeLong(long v) |
将long作为八个字节写入基础输出流,首先写入高字节。 |
void |
writeShort(int v) |
将一个短消息以两个字节的形式写入基础输出流,先写入高字节。 |
void |
writeUTF(String str) |
以独立于机器的方式使用修改的UTF-8编码将字符串写入基础输出流。 |
GZIPOutputStream
此类实现了一个流过滤器,用于以GZIP文件格式写入压缩数据。
构造方法 |
描述 |
GZIPOutputStream(OutputStream out) |
创建具有默认缓冲区大小的新输出流。 |
GZIPOutputStream(OutputStream out, boolean syncFlush) |
创建具有默认缓冲区大小和指定刷新模式的新输出流。 |
GZIPOutputStream(OutputStream out, int size) |
创建具有指定缓冲区大小的新输出流。 |
GZIPOutputStream(OutputStream out, int size, boolean syncFlush) |
使用指定的缓冲区大小和刷新模式创建新的输出流。 |
修饰符和返回值 |
方法 |
描述 |
void |
finish() |
完成将压缩数据写入输出流,而不关闭基础流。 |
ZipOutputStream
此类实现了一个输出流过滤器,用于以ZIP文件格式写入文件。包括对压缩和未压缩项的支持。
构造方法 |
描述 |
ZipOutputStream(OutputStream out) |
创建新的ZIP输出流。 |
ZipOutputStream(OutputStream out, Charset charset) |
创建新的ZIP输出流。 |
修饰符和返回值 |
方法 |
描述 |
void |
closeEntry() |
关闭当前ZIP条目并定位流以写入下一个条目。 |
void |
finish() |
在不关闭基础流的情况下完成ZIP输出流内容的写入。 |
void |
putNextEntry(ZipEntry e) |
开始编写新的ZIP文件条目,并将流定位到条目数据的开头。 |
void |
setComment(String comment) |
设置ZIP文件注释。 |
void |
setLevel(int level) |
设置DEFLATED的后续条目的压缩级别。默认级别是Deflater.DEFAULT_COMPRESSION = -1; |
void |
setMethod(int method) |
为后续条目设置默认压缩方法。 |
void |
write(byte[] b, int off, int len) |
将字节数组写入当前ZIP条目数据。 |
Zip压缩级别
压缩水平调节压缩速度,zip压缩级别的总数为10 (0到-9),其中0表示无压缩(存储所有文件),-1表示最快的压缩速度(压缩程度较低),-9表示最慢的压缩速度(最佳压缩,忽略后缀列表)。
默认压缩级别为-1。
如果压缩级别越高,那么压缩速度就会越慢,但相应的压缩效果越好,压缩后的文件越小,反之,压缩级别越低,则压缩速度越快,相应的压缩效果越差,压缩后的文件越大
JarOutputStream
JarOutputStream类用于将JAR文件的内容写入任何输出流。它扩展了java.util.zip类。ZipOutputStream,支持编写可选的Manifest条目。Manifest可用于指定有关JAR文件及其条目的元信息。
构造方法 |
描述 |
JarOutputStream(OutputStream out) |
创建一个没有清单的新JarOutputStream。 |
JarOutputStream(OutputStream out, Manifest man) |
使用指定的Manifest创建新的JarOutputStream。 |
修饰符和返回值 |
方法 |
描述 |
void |
putNextEntry(ZipEntry ze) |
开始编写新的JAR文件条目,并将流定位到条目数据的开头。 |
1.1.2 字符流
输入流
Reader
用于读取字符流的抽象类。子类必须实现的唯一方法是read(char[], int, int)和close()。然而,大多数子类将覆盖此处定义的一些方法,以便提供更高的效率和/或更多的功能。
修饰符和返回值 |
方法 |
描述 |
void |
close() |
关闭流并释放与该流关联的任何系统资源。 |
void |
mark(int readAheadLimit) |
标记此流中的当前位置。 |
boolean |
markSupported() |
指示此流是否支持mark()操作。 |
int |
read() |
读取单个字符。 |
int |
read(char[] cbuf) |
将字符读入数组。 |
abstract int |
read(char[] cbuf, int off, int len) |
将字符读入数组的一部分。 |
int |
read(CharBuffer target) |
尝试将字符读入指定的字符缓冲区。 |
boolean |
ready() |
指示此流是否已准备好读取。 |
void |
reset() |
重置流。 |
long |
skip(long n) |
跳过字符。 |
BufferedReader
从字符输入流中读取文本,缓冲字符,以便有效读取字符、数组和行。
可以指定缓冲区大小,也可以使用默认大小。对于大多数目的,默认值足够大。
通常,由Reader发出的每个读取请求都会导致对底层字符或字节流发出相应的读取请求。因此,建议用BufferedReader包装read()操作代价高昂的Reader,例如FileReader和InputStreamReader。
例如:BufferedReader in = new BufferedReader(new FileReader(“foo.in”));
将缓冲来自指定文件的输入。如果没有缓冲,每次调用read()或readLine()都会导致从文件中读取字节,转换为字符,然后返回,这可能非常低效。
使用DataInputStreams进行文本输入的程序可以通过用适当的BufferedReader替换每个DataInputStream来本地化。
构造方法 |
描述 |
BufferedReader(Reader in) |
创建使用默认大小的输入缓冲区的缓冲字符输入流。 |
BufferedReader(Reader in, int sz) |
创建使用指定大小的输入缓冲区的缓冲字符输入流。 |
修饰符和返回值 |
方法 |
描述 |
Stream |
lines() |
返回一个流,其中的元素是从此BufferedReader读取的行。 |
String |
readLine() |
读取一行文本。 |
LineNumberReader
跟踪行号的缓冲字符输入流。此类定义了setLineNumber(int)和getLineNumber()方法,分别用于设置和获取当前行号。
默认情况下,行号从0开始。当读取数据时,该数字在每个行终止符处递增,并且可以通过调用setLineNumber(int)来更改。然而,请注意,setLineNumber(int)实际上不会改变流中的当前位置;它只更改getLineNumber()返回的值。
换行符(‘\n’)、回车符(‘\r’)或换行符后紧跟回车符中的任何一个都视为换行符。
构造方法 |
描述 |
LineNumberReader(Reader in) |
使用默认输入缓冲区大小创建新的行号读取器。 |
LineNumberReader(Reader in, int sz) |
创建一个新的行号读取器,将字符读入给定大小的缓冲区。 |
修饰符和返回值 |
方法 |
描述 |
int |
getLineNumber() |
获取当前行号。 |
void |
setLineNumber(int lineNumber) |
设置当前行号。 |
String |
readLine() |
读一行文字。 |
CharArrayReader
此类实现了可以用作字符输入流的字符缓冲区。
构造方法 |
描述 |
CharArrayReader(char[] buf) |
从指定的字符数组创建CharArrayReader。 |
CharArrayReader(char[] buf, int offset, int length) |
从指定的字符数组创建CharArrayReader。 |
FilterReader
用于读取过滤字符流的抽象类。抽象类FilterReader本身提供将所有请求传递到包含流的默认方法。FilterReader的子类应该覆盖这些方法中的一些,还可能提供其他方法和字段。
构造方法 |
描述 |
protected |
FilterReader(Reader in) |
PushbackReader
一种字符流读取器,允许字符被推回到流中。
构造方法 |
描述 |
PushbackReader(Reader in) |
使用一个字符的回推缓冲区创建一个新的回推读取器。 |
z(Reader in, int size) |
使用给定大小的回推缓冲区创建新的回推读取器。 |
修饰符和返回值 |
方法 |
描述 |
void |
unread(char[] cbuf) |
通过将字符数组复制到回推缓冲区的前部,将其推回。 |
void |
unread(char[] cbuf, int off, int len) |
通过将字符数组的一部分复制到回推缓冲区的前面,将其推回。 |
void |
unread(int c) |
通过将单个字符复制到回推缓冲区的前部,将其推回。 |
InputStreamReader
InputStreamReader是从字节流到字符流的桥梁:它读取字节并使用指定的字符集将其解码为字符。它使用的字符集可以通过名称指定,也可以显式指定,或者可以接受平台的默认字符集。
每次调用InputStreamReader的read()方法之一可能会导致从底层字节输入流中读取一个或多个字节。为了实现字节到字符的有效转换,可以从底层流中提前读取比满足当前读取操作所需的字节更多的字节。
为了获得最高效率,请考虑在BufferedReader中包装InputStreamReader。
构造方法 |
描述 |
InputStreamReader(InputStream in) |
创建使用默认字符集的InputStreamReader。 |
InputStreamReader(InputStream in, Charset cs) |
创建使用给定字符集的InputStreamReader。 |
InputStreamReader(InputStream in, CharsetDecoder dec) |
创建使用给定字符集解码器的InputStreamReader。 |
InputStreamReader(InputStream in, String charsetName) |
创建使用命名字符集的InputStreamReader。 |
修饰符和返回值 |
方法 |
描述 |
String |
getEncoding() |
返回此流使用的字符编码的名称。 |
FileReader
用于读取字符文件的便利类。此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。要自己指定这些值,请在FileInputStream上构造InputStreamReader。
FileReader用于读取字符流。对于读取原始字节流,请考虑使用FileInputStream。
构造方法 |
描述 |
FileReader(File file) |
根据要读取的文件创建一个新的FileReader。 |
FileReader(FileDescriptor fd) |
根据要读取的FileDescriptor创建新的FileReader。 |
FileReader(String fileName) |
根据要读取的文件的名称创建一个新的FileReader。 |
PipedReader
管道字符输入流。
构造方法 |
描述 |
PipedReader() |
创建PipedReader,使其尚未连接。 |
PipedReader(int pipeSize) |
创建PipedReader,使其尚未连接,并使用指定的管道大小作为管道缓冲区。 |
PipedReader(PipedWriter src) |
创建PipedReader,使其连接到管道编写器src。 |
PipedReader(PipedWriter src, int pipeSize) |
创建PipedReader,使其连接到PipedWriter src,并使用管道缓冲区的指定管道大小。 |
修饰符和返回值 |
方法 |
描述 |
void |
connect(PipedWriter src) |
使此管道读取器连接到管道写入器src。 |
StringReader
源为字符串的字符流。
构造方法 |
描述 |
StringReader(String s) |
创建新的字符串读取器。 |
输出流
Writer
用于写入字符流的抽象类。子类必须实现的唯一方法是write(char[],int,int)、flush()和close()。然而,大多数子类将覆盖此处定义的一些方法,以便提供更高的效率和/或更多的功能。
构造方法 |
描述 |
protected |
Writer() |
protected |
Writer(Object lock) |
修饰符和返回值 |
方法 |
描述 |
Writer |
append(char c) |
将指定的字符追加到此writer。 |
Writer |
append(CharSequence csq) |
将指定的字符序列追加到此writer。 |
Writer |
append(CharSequence csq, int start, int end) |
将指定字符序列的子序列追加到此writer。 |
abstract void |
close() |
关闭流,先清空(flush)它。 |
abstract void |
flush() |
清空流。当文件调用写文件后,紧接着调用f.flush(),那么写完后立即就会往磁盘里写,打开文件就会看见自己写的内容,优点也就是快速写入硬盘文件中 |
void |
write(char[] cbuf) |
写入字符数组。 |
abstract void |
write(char[] cbuf, int off, int len) |
写入字符数组的一部分。 |
void |
write(int c) |
写入单个字符。 |
void |
write(String str) |
写入字符串。 |
void |
write(String str, int off, int len) |
写入字符串的一部分。 |
BufferedWriter
将文本写入字符输出流,缓冲字符,以便有效地写入单个字符、数组和字符串。
可以指定缓冲区大小,也可以接受默认大小。对于大多数目的,默认值足够大。
提供了一个newLine()方法,它使用平台自己的行分隔符概念,如系统属性line.separator所定义的。并非所有平台都使用换行符(“\n”)来终止行。因此,调用此方法终止每个输出行比直接写入换行符更可取。
通常,Writer会立即将其输出发送到基础字符或字节流。除非需要提示输出,否则建议将BufferedWriter包装write()操作可能代价高昂的Writer,例如FileWriter和OutputStreamWriter。例如:
PrintWriter out= new PrintWriter(new BufferedWriter(new FileWriter(“foo.out”)));
将PrintWriter的输出缓冲到文件中。如果没有缓冲,每次调用print()方法都会将字符转换为字节,然后立即写入文件,这可能非常低效。
构造方法 |
描述 |
BufferedWriter(Writer out) |
创建使用默认大小的输出缓冲区的缓冲字符输出流。 |
BufferedWriter(Writer out, int sz) |
创建使用给定大小的输出缓冲区的新缓冲字符输出流。 |
修饰符和返回值 |
方法 |
描述 |
void |
newLine() |
写入一个行分隔符 |
CharArrayWriter
此类实现了可以用作Writer的字符缓冲区。当数据写入流时,缓冲区会自动增长。可以使用toCharArray()和toString()检索数据。
注意:在这个类上调用close()没有效果,可以在流关闭后调用这个类的方法,而不生成IOException。
构造方法 |
描述 |
CharArrayWriter() |
创建新的CharArrayWriter。 |
CharArrayWriter(int initialSize) |
创建具有指定初始大小的新CharArrayWriter。 |
修饰符和返回值 |
方法 |
描述 |
int |
size() |
返回缓冲区的当前大小。 |
char[] |
toCharArray() |
返回输入数据的副本。 |
String |
toString() |
将输入数据转换为字符串。 |
void |
writeTo(Writer out) |
将缓冲区的内容写入另一个字符流。 |
FilterWriter
用于编写过滤字符流的抽象类。抽象类FilterWriter本身提供将所有请求传递到包含流的默认方法。FilterWriter的子类应该覆盖这些方法中的一些,还可能提供其他方法和字段。
构造方法 |
描述 |
protected |
FilterWriter(Writer out) |
OutputStreamWriter
OutputStreamWriter是从字符流到字节流的桥梁:写入其中的字符使用指定的字符集编码为字节。它使用的字符集可以通过名称指定,也可以显式指定,或者可以接受平台的默认字符集。
每次调用write()方法都会导致对给定字符调用编码转换器。生成的字节在被写入底层输出流之前被累积在缓冲区中。可以指定此缓冲区的大小,但默认情况下,它对于大多数目的来说足够大。请注意,传递给write()方法的字符没有缓冲。
为了获得最高效率,请考虑在BufferedWriter中包装OutputStreamWriter,以避免频繁的转换器调用。
代理项对(surrogate pairs)是一个由两个字符值序列表示的字符:“\uD800”到“\uDBFF”范围内的高代理项,后面是“\uDC00”到‘\uDFFF’范围内的低代理项。
格式不正确的代理元素是不后跟低代理项的高代理项或不后跟高代理项的低代理项。
此类总是用字符集的默认替换序列替换格式错误的代理元素和不可映射的字符序列。当需要对编码过程进行更多控制时,应使用CharsetEncoder类。
什么是代理项对(surrogate airs)?
代理项对,实际上是指:对于一个UTF16编码改用两个UTF16编码来代替。
为何需要surrogate airs?
本来一个字符用一个UTF16编码(两个字节)来表示即可,但是由于需要被编码的字符越来越多,只用一个UTF16编码已经不足于表示所有的字符。因此,就需要考虑使用2个UTF16来表示一个字符(四个字节)。但是如果对于所有的字符都这样编码的话,太浪费空间了(原来只需要2个字节,现在都改用4个字节),所以规定,只有使用两个一定范围内的UTF16编码才被认为是一组surrogate pairs,其一起用来表示一个字符,对于其余的情形还是用一个UTF16来表示一个字符。
构造方法 |
描述 |
OutputStreamWriter(OutputStream out) |
创建使用默认字符编码的OutputStreamWriter。 |
OutputStreamWriter(OutputStream out, Charset cs) |
创建使用给定字符集的OutputStreamWriter。 |
OutputStreamWriter(OutputStream out, CharsetEncoder enc) |
创建使用给定字符集编码器的OutputStreamWriter。 |
OutputStreamWriter(OutputStream out, String charsetName) |
创建使用命名字符集的OutputStreamWriter。 |
修饰符和返回值 |
方法 |
描述 |
String |
getEncoding() |
返回此流使用的字符编码的名称。 |
FileWriter
编写字符文件的便利类。此类的构造函数假定默认字符编码和默认字节缓冲区大小是可接受的。要自己指定这些值,请在FileOutputStream上构造OutputStreamWriter。
文件是否可用或是否可以创建取决于底层平台。特别是一些平台,一次只允许一个FileWriter(或其他文件写入对象)打开文件进行写入。在这种情况下,如果涉及的文件已经打开,则此类中的构造函数将失败。
FileWriter用于编写字符流。对于写入原始字节流,请考虑使用FileOutputStream。
构造方法 |
描述 |
FileWriter(File file) |
在给定File对象的情况下构造FileWriter对象。 |
FileWriter(File file, boolean append) |
在给定File对象的情况下构造FileWriter对象。 |
FileWriter(FileDescriptor fd) |
构造与文件描述符关联的FileWriter对象。 |
FileWriter(String fileName) |
构造给定文件名的FileWriter对象。 |
FileWriter(String fileName, boolean append) |
构造一个文件名为的FileWriter对象,该对象带有一个布尔值,指示是否附加写入的数据。 |
PipedWriter
管道化字符输出流。
构造方法 |
描述 |
PipedWriter() |
创建尚未连接到管道读取器的管道编写器。 |
PipedWriter(PipedReader snk) |
创建连接到指定管道读取器的管道编写器。 |
修饰符和返回值 |
方法 |
描述 |
void |
connect(PipedReader snk) |
将此管道编写器连接到接收器。 |
PrintWriter
将对象的格式化表示打印到文本输出流。此类实现PrintStream中找到的所有打印方法。它不包含写入原始字节的方法,程序应使用未编码的字节流。
与PrintStream类不同,如果启用了自动刷新,则只有在调用println、printf或format方法之一时,而不是在输出换行符时,才会执行自动刷新。这些方法使用平台自己的行分隔符概念,而不是换行符。
这个类中的方法永远不会抛出I/O异常,尽管它的一些构造函数可能会。客户端可以通过调用checkError()来查询是否发生了任何错误。
构造方法 |
描述 |
PrintWriter(File file) |
使用指定的文件创建新的PrintWriter,而不自动刷新行。 |
PrintWriter(File file, String csn) |
使用指定的文件和字符集创建新的PrintWriter,而不自动刷新行。 |
PrintWriter(OutputStream out) |
从现有的OutputStream创建一个新的PrintWriter,而不自动刷新行。 |
PrintWriter(OutputStream out, boolean autoFlush) |
从现有的OutputStream创建新的PrintWriter。 |
PrintWriter(String fileName) |
使用指定的文件名创建新的PrintWriter,而不自动刷新行。 |
PrintWriter(String fileName, String csn) |
使用指定的文件名和字符集创建新的PrintWriter,无需自动刷新行。 |
PrintWriter(Writer out) |
创建新的PrintWriter,没有自动换行刷新。 |
PrintWriter(Writer out, boolean autoFlush) |
创建新的PrintWriter,自动刷新 |
修饰符和返回值 |
方法 |
描述 |
boolean |
checkError() |
如果流未关闭,则刷新流并检查其错误状态。 |
protected void |
clearError() |
清除此流的错误状态。 |
PrintWriter |
format(Locale l, String format, Object… args) |
使用指定的格式字符串和参数将格式化字符串写入此写入程序。 |
PrintWriter |
format(String format, Object… args) |
使用指定的格式字符串和参数将格式化字符串写入此写入程序。 |
void |
print(boolean b) |
打印布尔值。 |
void |
print(char c) |
打印字符。 |
void |
print(char[] s) |
打印字符数组。 |
void |
print(double d) |
打印双精度浮点数。 |
void |
print(float f) |
打印浮点数。 |
void |
print(int i) |
打印整数。 |
void |
print(long l) |
打印长整数。 |
oid |
print(Object obj) |
打印对象。 |
void |
print(String s) |
打印字符串。 |
PrintWriter |
printf(Locale l, String format, Object… args) |
使用指定的格式字符串和参数向此编写器写入格式化字符串的方便方法。 |
PrintWriter |
printf(String format, Object… args) |
使用指定的格式字符串和参数向此编写器写入格式化字符串的方便方法。 |
void |
println() |
通过写入行分隔符字符串终止当前行。 |
void |
println(boolean x) |
打印布尔值,然后终止该行。 |
void |
println(char x) |
打印一个字符,然后终止该行。 |
void |
println(char[] x) |
打印字符数组,然后终止该行。 |
void |
println(double x) |
打印双精度浮点数,然后终止该行。 |
void |
println(float x) |
打印浮点数,然后终止该行。 |
void |
println(int x) |
打印一个整数,然后终止该行。 |
void |
println(long x) |
打印一个长整数,然后终止该行。 |
void |
println(Object x) |
打印对象,然后终止行。 |
void |
println(String x) |
打印字符串,然后终止该行。 |
protected void |
setError() |
指明发生了错误。 |
StringWriter
一种字符流,将其输出收集在字符串缓冲区中,然后可用于构造字符串。
关闭StringWriter无效。可以在流关闭后调用此类中的方法,而不生成IOException。
构造方法 |
描述 |
StringWriter() |
使用默认的初始字符串缓冲区大小创建新的字符串编写器。 |
StringWriter(int initialSize) |
使用指定的初始字符串缓冲区大小创建新的字符串编写器。 |
修饰符和返回值 |
方法 |
描述 |
StringBuffer |
getBuffer() |
返回字符串缓冲区本身。 |
String |
toString() |
以字符串形式返回缓冲区的当前值。 |
1.2 Java NIO中的文件I/O
JDK7对文件操作进行了增强,增加的很多新的支持类。
Path
用来在文件系统中定位一个文件的类。
修饰符和返回值 |
方法 |
描述 |
int |
compareTo(Path other) |
按词典顺序比较两个抽象路径。 |
boolean |
endsWith(Path other) |
测试此路径是否以给定路径结束。 |
boolean |
endsWith(String other) |
测试此路径是否以Path结束,该Path是通过转换给定的路径字符串而构造的,其结果完全由endsWith(Path)方法决定。 |
boolean |
equals(Object other) |
测试此路径是否与给定对象相等。 |
Path |
getFileName() |
返回此路径的文件或目录的名称,作为Path对象返回。 |
FileSystem |
getFileSystem() |
返回创建此对象的文件系统。 |
Path |
getName(int index) |
将此路径的名称元素作为Path对象返回。 |
int |
getNameCount() |
返回路径中名称元素的数量。 |
Path |
getParent() |
返回父路径,如果此路径没有父路径,则返回null。 |
Path |
getRoot() |
将此路径的根组件作为Path对象返回,如果此路径没有根组件,则返回null。 |
int |
hashCode() |
计算此路径的哈希代码。 |
boolean |
isAbsolute() |
指示此路径是否为绝对路径。 |
Iterator |
iterator() |
返回此路径的name元素上的迭代器。 |
Path |
normalize() |
路径规范化,返回一个Path对象,该路径已消除冗余名称元素。 |
WatchKey |
register(WatchService watcher, WatchEvent.Kind<?>… events) |
向监视服务注册此路径所定位的文件。 |
WatchKey |
register(WatchService watcher, WatchEvent.Kind<?>[] events, WatchEvent.Modifier… modifiers) |
向监视服务注册此路径所定位的文件。 |
Path |
relativize(Path other) |
在该路径和给定路径之间构造相对路径。 |
Path |
resolve(Path other) |
根据此路径解析给定路径。 |
Path |
resolve(String other) |
将给定的路径字符串转换为Path,并完全按照resolve方法指定的方式对此path进行解析。 |
Path |
resolveSibling(Path other) |
根据此路径的父路径解析给定路径。 |
Path |
resolveSibling(String other) |
将给定的路径字符串转换为Path,并根据此路径的父路径以resolveSibling方法指定的方式进行解析。 |
boolean |
startsWith(Path other) |
测试此路径是否以给定路径开始。 |
boolean |
startsWith(String other) |
测试此路径是否以path开头,该path是通过以startsWith(path)方法指定的方式转换给定的路径字符串构造的。 |
Path |
subpath(int beginIndex, int endIndex) |
返回一个相对路径,它是此路径的名称元素的子序列。 |
Path |
toAbsolutePath() |
返回表示此路径的绝对路径的Path对象。 |
File |
toFile() |
返回表示此路径的File对象。 |
Path |
toRealPath(LinkOption… options) |
返回现有文件的真实路径。 |
String |
toString() |
返回此路径的字符串表示形式。 |
URI |
toUri() |
返回表示此路径的URI对象。 |
Files
这个类只包含对文件、目录或其他类型的文件进行操作的静态方法。在大多数情况下,此处定义的方法将委托给关联的文件系统提供程序来执行文件操作。
修饰符和返回值 |
方法 |
描述 |
static long |
copy(InputStream in, Path target, CopyOption… options) |
将输入流中的所有字节复制到文件中。 |
static long |
copy(Path source, OutputStream out) |
将文件中的所有字节复制到输出流。 |
static Path |
copy(Path source, Path target, CopyOption… options) |
将文件复制到目标文件。 |
static Path |
createDirectories(Path dir, FileAttribute<?>… attrs) |
通过首先创建所有不存在的父目录来创建目录。 |
static Path |
createDirectory(Path dir, FileAttribute<?>… attrs) |
创建新目录 |
static Path |
createFile(Path path, FileAttribute<?>… attrs) |
创建一个新的空文件,如果该文件已存在,则失败。 |
static Path |
createLink(Path link, Path existing) |
为现有文件创建新链接(目录条目)(可选操作)。 |
static Path |
createSymbolicLink(Path link, Path target, FileAttribute<?>… attrs) |
创建指向目标的符号链接(可选操作)。 |
static Path |
createTempDirectory(Path dir, String prefix, FileAttribute<?>… attrs) |
在指定目录中创建一个新目录,使用给定的前缀生成其名称。 |
static Path |
createTempDirectory(String prefix, FileAttribute<?>… attrs) |
在默认临时文件目录中创建一个新目录,使用给定的前缀生成其名称。 |
static Path |
createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>… attrs) |
在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 |
static Path |
createTempFile(String prefix, String suffix, FileAttribute<?>… attrs) |
在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。 |
static void |
delete(Path path) |
删除文件。文件不存在话抛异常。 |
static boolean |
deleteIfExists(Path path) |
如果存在,删除文件。文件不存在返回false。 |
static boolean |
exists(Path path, LinkOption… options) |
测试文件是否存在。 |
static Stream |
find(Path start, int maxDepth, BiPredicate<Path,BasicFileAttributes> matcher, FileVisitOption… options) |
通过在以给定起始文件为根的文件树中搜索文件,返回一个用Path惰性填充的流。 |
static Object |
getAttribute(Path path, String attribute, LinkOption… options) |
读取文件属性的值。 |
static V |
getFileAttributeView(Path path, Class type, LinkOption… options) |
返回给定类型的文件属性视图。 |
static FileStore |
getFileStore(Path path) |
返回表示文件所在的文件存储的FileStore。 |
static FileTime |
getLastModifiedTime(Path path, LinkOption… options) |
返回文件的上次修改时间。 |
static UserPrincipal |
getOwner(Path path, LinkOption… options) |
返回文件的所有者。 |
static Set |
getPosixFilePermissions(Path path, LinkOption… options) |
返回文件的POSIX文件权限。 |
static boolean |
isDirectory(Path path, LinkOption… options) |
测试文件是否为目录。 |
static boolean |
isExecutable(Path path) |
测试文件是否可执行。 |
static boolean |
isHidden(Path path) |
指示文件是否被视为隐藏。 |
static boolean |
isReadable(Path path) |
测试文件是否可读。 |
static boolean |
isRegularFile(Path path, LinkOption… options) |
测试文件是否是包含不透明内容的常规文件。 |
static boolean |
isSameFile(Path path, Path path2) |
测试两个路径是否位于同一文件。 |
static boolean |
isSymbolicLink(Path path) |
测试文件是否为符号链接。 |
static boolean |
isWritable(Path path) |
测试文件是否可写。 |
static Stream |
lines(Path path) |
将文件中的所有行作为流读取。 |
static Stream |
lines(Path path, Charset cs) |
将文件中的所有行作为流读取。 |
static Stream |
list(Path dir) |
返回一个懒散填充的Stream,其中的元素是目录中的条目。 |
static Path |
move(Path source, Path target, CopyOption… options) |
将文件移动或重命名为目标文件。 |
static BufferedReader |
newBufferedReader(Path path) |
打开一个文件进行读取,返回一个BufferedReader以高效的方式读取文件中的文本。 |
static BufferedReader |
newBufferedReader(Path path, Charset cs) |
打开一个文件进行读取,返回一个BufferedReader,它可以用于以有效的方式从文件中读取文本。 |
static BufferedWriter |
newBufferedWriter(Path path, Charset cs, OpenOption… options) |
打开或创建一个用于写入的文件,返回一个BufferedWriter,可用于以高效的方式将文本写入文件。 |
static BufferedWriter |
newBufferedWriter(Path path, OpenOption… options) |
打开或创建要写入的文件,返回BufferedWriter以高效的方式将文本写入文件。 |
static SeekableByteChannel |
newByteChannel(Path path, OpenOption… options) |
打开或创建文件,返回可查找的字节通道以访问文件。 |
static SeekableByteChannel |
newByteChannel(Path path, Set<? extends OpenOption> options, FileAttribute<?>… attrs) |
打开或创建文件,返回可查找的字节通道以访问文件。 |
static DirectoryStream |
newDirectoryStream(Path dir) |
打开目录,返回DirectoryStream以遍历目录中的所有条目。 |
static DirectoryStream |
newDirectoryStream(Path dir, DirectoryStream.Filter<? super Path> filter) |
|
static DirectoryStream |
newDirectoryStream(Path dir, String glob) |
打开一个目录,返回DirectoryStream以遍历目录中的条目。 |
static InputStream |
newInputStream(Path path, OpenOption… options) |
打开文件,返回要从文件读取的输入流。 |
static OutputStream |
newOutputStream(Path path, OpenOption… options) |
打开或创建文件,返回可用于向文件写入字节的输出流。 |
static boolean |
notExists(Path path, LinkOption… options) |
测试此路径所定位的文件是否不存在。 |
static String |
probeContentType(Path path) |
探测文件的内容类型。 |
static byte[] |
readAllBytes(Path path) |
读取文件中的所有字节。 |
static List |
readAllLines(Path path) |
读取文件中的所有行。 |
static List |
readAllLines(Path path, Charset cs) |
读取文件中的所有行。 |
static A |
readAttributes(Path path, Class type, LinkOption… options) |
作为批量操作读取文件的属性。 |
static Map<String,Object> |
readAttributes(Path path, String attributes, LinkOption… options) |
作为批量操作读取一组文件属性。 |
static Path |
readSymbolicLink(Path link) |
读取符号链接的目标(可选操作)。 |
static Path |
setAttribute(Path path, String attribute, Object value, LinkOption… options) |
设置文件属性的值。 |
static Path |
setLastModifiedTime(Path path, FileTime time) |
更新文件的上次修改时间属性。 |
static Path |
setOwner(Path path, UserPrincipal owner) |
更新文件所有者。 |
static Path |
setPosixFilePermissions(Path path, Set perms) |
设置文件的POSIX权限。 |
static long |
size(Path path) |
返回文件的大小(字节)。 |
static Stream |
walk(Path start, FileVisitOption… options) |
通过遍历以给定起始文件为根的文件树,返回一个用Path填充的流。 |
static Stream |
walk(Path start, int maxDepth, FileVisitOption… options) |
通过遍历以给定起始文件为根的文件树,返回一个用Path填充的流。 |
static Path |
walkFileTree(Path start, FileVisitor<? super Path> visitor) |
浏览文件树。 |
static Path |
walkFileTree(Path start, Set options, int maxDepth, FileVisitor<? super Path> visitor) |
浏览文件树。 |
static Path |
write(Path path, byte[] bytes, OpenOption… options) |
将字节写入文件。 |
static Path |
write(Path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption… options) |
将文本行写入文件。 |
static Path |
write(Path path, Iterable<? extends CharSequence> lines, OpenOption… options) |
将文本行写入文件。 |
FileSystem
提供文件系统的接口,是对象访问文件系统中的文件和其他对象的工厂。
通过调用FileSystems获得的默认文件系统。getDefault方法提供对Java虚拟机可访问的文件系统的访问。
修饰符和返回值 |
方法 |
描述 |
abstract void |
close() |
关闭此文件系统。 |
abstract Iterable |
getFileStores() |
返回要遍历底层文件存储的对象。 |
abstract Path |
getPath(String first, String… more) |
将路径字符串或连接后形成路径字符串的字符串序列转换为path。 |
abstract PathMatcher |
getPathMatcher(String syntaxAndPattern) |
返回一个PathMatcher,通过解释给定的pattern对Path对象的String表示执行匹配操作。 |
abstract Iterable |
getRootDirectories() |
返回一个对象,以遍历根目录的路径。 |
abstract String |
getSeparator() |
返回名称分隔符,以字符串表示。 |
abstract UserPrincipalLookupService |
getUserPrincipalLookupService() |
返回此文件系统的UserPrincipalLookupService(可选操作)。 |
abstract boolean |
isOpen() |
指示此文件系统是否已打开。 |
abstract boolean |
isReadOnly() |
指示此文件系统是否只允许对其文件存储进行只读访问。 |
abstract WatchService |
newWatchService() |
构造新的WatchService(可选操作)。 |
abstract FileSystemProvider |
provider() |
返回创建此文件系统的provider。 |
abstract Set |
supportedFileAttributeViews() |
返回此FileSystem支持的文件属性视图的名称集。 |
FileSystems
文件系统的工厂方法。此类定义了获取默认文件系统的getDefault方法和构造其他类型文件系统的工厂方法。
该类定义的任何方法的第一次调用都会导致加载默认提供程序。由URI schema “file”标识的默认provider创建FileSystem,该FileSystem提供对Java虚拟机可访问的文件系统的访问。如果加载或初始化默认提供程序的过程失败,则会引发未指定的错误。
修饰符和返回值 |
方法 |
描述 |
static FileSystem |
getDefault() |
返回默认文件系统。 |
static FileSystem |
getFileSystem(URI uri) |
返回对现有文件系统的引用。 |
static FileSystem |
newFileSystem(Path path, ClassLoader loader) |
构造一个新的FileSystem,以文件系统的形式访问文件的内容。 |
static FileSystem |
newFileSystem(URI uri, Map<String,?> env) |
构造一个由URI标识的新文件系统 |
static FileSystem |
newFileSystem(URI uri, Map<String,?> env, ClassLoader loader) |
构造一个由URI标识的新文件系统 |
所有评论(0)