字段摘要 |
protected | 用于同步针对此流的操作的对象。 |
构造方法摘要 |
protected | () 创建一个新的字符流 writer,其关键部分将同步 writer 自身。 |
protected | ( lock) 创建一个新的字符流 writer,其关键部分将同步给定的对象。 |
方法摘要 |
| (char c) 将指定字符添加到此 writer。 |
| ( csq) 将指定字符序列添加到此 writer。 |
| ( csq, int start, int end) 将指定字符序列的子序列添加到此 writer.Appendable。 |
abstract void | () 关闭此流,但要先刷新它。 |
abstract void | () 刷新该流的缓冲。 |
void | (char[] cbuf) 写入字符数组。 |
abstract void | (char[] cbuf, int off, int len) 写入字符数组的某一部分。 |
void | (int c) 写入单个字符。 |
void | ( str) 写入字符串。 |
void | ( str, int off, int len) 写入字符串的某一部分。 |
从类 java.lang. 继承的方法 |
, , , , , , , , , , |
lock
protected lock
- 用于同步针对此流的操作的对象。为了提高效率,字符流对象可以使用其自身以外的对象来保护关键部分。因此,子类应使用此字段中的对象,而不是 this 或者同步的方法。
Writer
protected Writer()
- 创建一个新的字符流 writer,其关键部分将同步 writer 自身。
Writer
protected Writer( lock)
- 创建一个新的字符流 writer,其关键部分将同步给定的对象。
参数: -
lock
- 要同步的对象。
write
public void write(int c) throws
- 写入单个字符。要写入的字符包含在给定整数值的 16 个低位中,16 高位被忽略。
用于支持高效单字符输出的子类应重写此方法。
-
参数: -
c
- 指定要写入字符的 int。 抛出: -
- 如果发生 I/O 错误
write
public void write(char[] cbuf) throws
- 写入字符数组。
-
参数: -
cbuf
- 要写入的字符数组 抛出: -
- 如果发生 I/O 错误
write
public abstract void write(char[] cbuf, int off, int len) throws
- 写入字符数组的某一部分。
-
参数: -
cbuf
- 字符数组 -
off
- 开始写入字符处的偏移量 -
len
- 要写入的字符数 抛出: -
- 如果发生 I/O 错误
write
public void write( str) throws
- 写入字符串。
-
参数: -
str
- 要写入的字符串 抛出: -
- 如果发生 I/O 错误
write
public void write( str, int off, int len) throws
- 写入字符串的某一部分。
-
参数: -
str
- 字符串 -
off
- 相对初始写入字符的偏移量 -
len
- 要写入的字符数 抛出: -
- 如果 off 或 len 为负,或者 off+len 为负或大于给定字符串的长度 -
- 如果发生 I/O 错误
append
public append( csq) throws
- 将指定字符序列添加到此 writer。
以 out.append(csq) 的形式调用此方法,行为与以下调用完全相同:
out.write(csq.toString())
可能不添加整个序列,也可能添加,具体取决于字符序列 csq 的 toString 规范。例如,调用一个字符缓冲区的 toString 方法将返回一个子序列,其内容取决于缓冲区的位置和限制。
-
指定者: - 接口
中的
-
参数: -
csq
- 要添加的字符串序列。如果 csq 为 null,则向此 writer 添加四个字符 "null"。 返回: - 此 writer
抛出: -
- 如果发生 I/O 错误 从以下版本开始: - 1.5
append
public append( csq, int start, int end) throws
- 将指定字符序列的子序列添加到此 writer. Appendable。
当 csq 不为 null 时,以 out.append(csq, start, end) 的形式调用此方法,行为与以下调用完全相同:
out.write(csq.subSequence(start, end).toString())
-
指定者: - 接口
中的
-
参数: -
csq
- 要添加子序列的字符序列。如果 csq 为 null,则添加四个字符 "null",就好像 csq 包含这些字符一样。 -
start
- 子序列中第一个字符的索引 -
end
- 子序列中最后一个字符后面的字符的索引 返回: - 此 writer
抛出: -
- 如果 start 或 end 为负,而 start 大于 end 或者 end 大于 csq.length() -
- 如果发生 I/O 错误 从以下版本开始: - 1.5
append
public append(char c) throws
- 将指定字符添加到此 writer。
以 out.append(c) 的形式调用此方法,行为与以下调用完全相同:
out.write(c)
-
指定者: - 接口
中的
-
参数: -
c
- 要添加的 16 位字符 返回: - 此 writer
抛出: -
- 如果发生 I/O 错误 从以下版本开始: - 1.5
flush
public abstract void flush() throws
- 刷新该流的缓冲。如果该流已保存缓冲区中各种 write() 方法的所有字符,则立即将它们写入预期目标。然后,如果该目标是另一个字符或字节流,则将其刷新。因此,一次 flush() 调用将刷新 Writer 和 OutputStream 链中的所有缓冲区。
如果此流的预期目标是由底层操作系统提供的一个抽象(如一个文件),则刷新该流只能保证将以前写入到流的字节传递给操作系统进行写入,但不保证能将这些字节实际写入到物理设备(如磁盘驱动器)。
-
指定者: - 接口
中的
-
抛出: -
- 如果发生 I/O 错误
close
public abstract void close() throws
- 关闭此流,但要先刷新它。在关闭该流之后,再调用 write() 或 flush() 将导致抛出 IOException。关闭以前关闭的流无效。
-
指定者: - 接口
中的
-
抛出: -
- 如果发生 I/O 错误
类Reader
字段摘要 |
protected | 用于同步针对此流的操作的对象。 |
构造方法摘要 |
protected | () 创建一个新的字符流 reader,其重要部分将同步其自身的 reader。 |
protected | ( lock) 创建一个新的字符流 reader,其重要部分将同步给定的对象。 |
方法摘要 |
abstract void | () 关闭该流并释放与之关联的所有资源。 |
void | (int readAheadLimit) 标记流中的当前位置。 |
boolean | () 判断此流是否支持 mark() 操作。 |
int | () 读取单个字符。 |
int | (char[] cbuf) 将字符读入数组。 |
abstract int | (char[] cbuf, int off, int len) 将字符读入数组的某一部分。 |
int | ( target) 试图将字符读入指定的字符缓冲区。 |
boolean | () 判断是否准备读取此流。 |
void | () 重置该流。 |
long | (long n) 跳过字符。 |
从类 java.lang. 继承的方法 |
, , , , , , , , , , |
lock
protected lock
- 用于同步针对此流的操作的对象。为了提高效率,字符流对象可以使用其自身以外的对象来保护重要部分。因此,子类应使用此字段中的对象,而不是 this 或者同步的方法。
Reader
protected Reader()
- 创建一个新的字符流 reader,其重要部分将同步其自身的 reader。
Reader
protected Reader( lock)
- 创建一个新的字符流 reader,其重要部分将同步给定的对象。
参数: -
lock
- 要同步的对象。
read
public int read( target) throws
- 试图将字符读入指定的字符缓冲区。缓冲区可照原样用作字符的存储库:所做的唯一改变是 put 操作的结果。不对缓冲区执行翻转或重绕操作。
-
指定者: - 接口
中的
-
参数: -
target
- 要将字符读入的缓冲区 返回: - 添加到缓冲区的字符数量,如果此字符源位于缓冲区末端,则返回 -1
抛出: -
- 如果发生 I/O 错误 -
- 如果目标为空 -
ReadOnlyBufferException
- 如果目标是一个只读缓冲区 从以下版本开始: - 1.5
read
public int read() throws
- 读取单个字符。在字符可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。
用于支持高效的单字符输入的子类应重写此方法。
-
-
返回: - 作为整数读取的字符,范围在 0 到 65535 之间 ( 0x00-0xffff),如果已到达流的末尾,则返回 -1
抛出: -
- 如果发生 I/O 错误
read
public int read(char[] cbuf) throws
- 将字符读入数组。在某个输入可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。
-
-
参数: -
cbuf
- 目标缓冲区 返回: - 读取的字符数,如果已到达流的末尾,则返回 -1
抛出: -
- 如果发生 I/O 错误
read
public abstract int read(char[] cbuf, int off, int len) throws
- 将字符读入数组的某一部分。在某个输入可用、发生 I/O 错误或者到达流的末尾前,此方法一直阻塞。
-
-
参数: -
cbuf
- 目标缓冲区 -
off
- 开始存储字符处的偏移量 -
len
- 要读取的最多字符数 返回: - 读取的字符数,如果已到达流的末尾,则返回 -1
抛出: -
- 如果发生 I/O 错误
skip
public long skip(long n) throws
- 跳过字符。在某个字符可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。
-
-
参数: -
n
- 要跳过的字符数 返回: - 实际跳过的字符数
抛出: -
- 如果 n
为负。 -
- 如果发生 I/O 错误
ready
public boolean ready() throws
- 判断是否准备读取此流。
-
-
返回: - 如果保证下一个 read() 不阻塞输入,则返回 True,否则返回 false。注意,返回 false 并不保证阻塞下一次读取。
抛出: -
- 如果发生 I/O 错误
markSupported
public boolean markSupported()
- 判断此流是否支持 mark() 操作。默认实现始终返回 false。子类应重写此方法。
-
-
返回: - 当且仅当此流支持此 mark 操作时,返回 true。
mark
public void mark(int readAheadLimit) throws
- 标记流中的当前位置。对 reset() 的后续调用将尝试将该流重新定位到此点。并不是所有的字符输入流都支持 mark() 操作。
-
-
参数: -
readAheadLimit
- 在仍保留该标记的情况下,对可读取字符数量的限制。在读取这样多的字符后,尝试重置流可能会失败。 抛出: -
- 如果该流不支持 mark(),或者发生一些其他 I/O 错误
reset
public void reset() throws
- 重置该流。如果已标记该流,则尝试在该标记处重新定位该流。如果已标记该流,则以适用于特定流的某种方式尝试重置该流,例如,通过将该流重新定位到其起始点。并不是所有的字符输入流都支持 reset() 操作,有些支持 reset() 而不支持 mark()。
-
-
抛出: -
- 如果尚未标记流,或者该标记已失效,或者该流不支持 reset(),或者发生一些其他 I/O 错误
close
public abstract void close() throws
- 关闭该流并释放与之关联的所有资源。在关闭该流后,再调用 read()、ready()、mark()、reset() 或 skip() 将抛出 IOException。关闭以前关闭的流无效。
-
指定者: - 接口
中的
-
抛出: -
- 如果发生 I/O 错误
例:
//以下是实现复制功能import java.io.*;class io1 { public static void main(String[] args) { FileWriter fw = null;//在外面创建,避免里面直接新建后面无法读取fw,fr FileReader fr = null; try { fw = new FileWriter("h.txt");//创建一个h.txt文件 fr = new FileReader("h.java");//读取h.java文件 } catch (IOException e) { System.out.println(e.toString()); } char [] buf = new char[1024];//定义数组 int num = 0; try { while((num = fr.read(buf))!=-1)//当读取不等于-1时写入 { fw.write(buf); } } catch (IOException e) { System.out.println(e.toString()); } try { if(fr!=null)//不为空则关闭 fr.close(); } catch (IOException e) { System.out.println(e.toString()); } try { if(fw!=null) fw.close(); } catch (IOException e) { System.out.println(e.toString()); } }}