java类Writer和类Reader小结

简介:
字段摘要
protected  Object lock
          用于同步针对此流的操作的对象。
 
构造方法摘要
protected Writer()
          创建一个新的字符流 writer,其关键部分将同步 writer 自身。
protected Writer(Object lock)
          创建一个新的字符流 writer,其关键部分将同步给定的对象。
 
方法摘要
 Writer append(char c)
          将指定字符添加到此 writer。
 Writer append(CharSequence csq)
          将指定字符序列添加到此 writer。
 Writer append(CharSequence csq, int start, int end)
          将指定字符序列的子序列添加到此 writer.Appendable。
abstract  void close()
          关闭此流,但要先刷新它。
abstract  void 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)
          写入字符串的某一部分。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

lock

protected Object lock
用于同步针对此流的操作的对象。为了提高效率,字符流对象可以使用其自身以外的对象来保护关键部分。因此,子类应使用此字段中的对象,而不是 this 或者同步的方法。

构造方法详细信息

Writer

protected Writer()
创建一个新的字符流 writer,其关键部分将同步 writer 自身。

Writer

protected Writer(Object lock)
创建一个新的字符流 writer,其关键部分将同步给定的对象。

参数:
lock - 要同步的对象。
方法详细信息

write

public void write(int c)
           throws IOException
写入单个字符。要写入的字符包含在给定整数值的 16 个低位中,16 高位被忽略。

用于支持高效单字符输出的子类应重写此方法。

参数:
c - 指定要写入字符的 int。
抛出:
IOException - 如果发生 I/O 错误

write

public void write(char[] cbuf)
           throws IOException
写入字符数组。
参数:
cbuf - 要写入的字符数组
抛出:
IOException - 如果发生 I/O 错误

write

public abstract void write(char[] cbuf,
                           int off,
                           int len)
                    throws IOException
写入字符数组的某一部分。
参数:
cbuf - 字符数组
off - 开始写入字符处的偏移量
len - 要写入的字符数
抛出:
IOException - 如果发生 I/O 错误

write

public void write(String str)
           throws IOException
写入字符串。
参数:
str - 要写入的字符串
抛出:
IOException - 如果发生 I/O 错误

write

public void write(String str,
                  int off,
                  int len)
           throws IOException
写入字符串的某一部分。
参数:
str - 字符串
off - 相对初始写入字符的偏移量
len - 要写入的字符数
抛出:
IndexOutOfBoundsException - 如果 off 或 len 为负,或者 off+len 为负或大于给定字符串的长度
IOException - 如果发生 I/O 错误

append

public Writer append(CharSequence csq)
              throws IOException
将指定字符序列添加到此 writer。

以 out.append(csq) 的形式调用此方法,行为与以下调用完全相同:

     out.write(csq.toString()) 

可能不添加整个序列,也可能添加,具体取决于字符序列 csq 的 toString 规范。例如,调用一个字符缓冲区的 toString 方法将返回一个子序列,其内容取决于缓冲区的位置和限制。

指定者:
接口 Appendable 中的 append
参数:
csq - 要添加的字符串序列。如果 csq 为 null,则向此 writer 添加四个字符 "null"。
返回:
此 writer
抛出:
IOException - 如果发生 I/O 错误
从以下版本开始:
1.5

append

public Writer append(CharSequence csq,
                     int start,
                     int end)
              throws IOException
将指定字符序列的子序列添加到此 writer.Appendable。

当 csq 不为 null 时,以 out.append(csq, start, end) 的形式调用此方法,行为与以下调用完全相同:

     out.write(csq.subSequence(start, end).toString()) 
指定者:
接口 Appendable 中的 append
参数:
csq - 要添加子序列的字符序列。如果 csq 为 null,则添加四个字符 "null",就好像 csq 包含这些字符一样。
start - 子序列中第一个字符的索引
end - 子序列中最后一个字符后面的字符的索引
返回:
此 writer
抛出:
IndexOutOfBoundsException - 如果 start 或 end 为负,而 start 大于 end 或者 end 大于 csq.length()
IOException - 如果发生 I/O 错误
从以下版本开始:
1.5

append

public Writer append(char c)
              throws IOException
将指定字符添加到此 writer。

以 out.append(c) 的形式调用此方法,行为与以下调用完全相同:

     out.write(c) 
指定者:
接口 Appendable 中的 append
参数:
c - 要添加的 16 位字符
返回:
此 writer
抛出:
IOException - 如果发生 I/O 错误
从以下版本开始:
1.5

flush

public abstract void flush()
                    throws IOException
刷新该流的缓冲。如果该流已保存缓冲区中各种 write() 方法的所有字符,则立即将它们写入预期目标。然后,如果该目标是另一个字符或字节流,则将其刷新。因此,一次 flush() 调用将刷新 Writer 和 OutputStream 链中的所有缓冲区。

如果此流的预期目标是由底层操作系统提供的一个抽象(如一个文件),则刷新该流只能保证将以前写入到流的字节传递给操作系统进行写入,但不保证能将这些字节实际写入到物理设备(如磁盘驱动器)。

指定者:
接口 Flushable 中的 flush
抛出:
IOException - 如果发生 I/O 错误

close

public abstract void close()
                    throws IOException
关闭此流,但要先刷新它。在关闭该流之后,再调用 write() 或 flush() 将导致抛出 IOException。关闭以前关闭的流无效。
指定者:
接口 Closeable 中的 close
抛出:
IOException - 如果发生 I/O 错误


类Reader

字段摘要
protected  Object lock
          用于同步针对此流的操作的对象。
 
构造方法摘要
protected Reader()
          创建一个新的字符流 reader,其重要部分将同步其自身的 reader。
protected Reader(Object lock)
          创建一个新的字符流 reader,其重要部分将同步给定的对象。
 
方法摘要
abstract  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)
          跳过字符。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

lock

protected Object lock
用于同步针对此流的操作的对象。为了提高效率,字符流对象可以使用其自身以外的对象来保护重要部分。因此,子类应使用此字段中的对象,而不是 this 或者同步的方法。
构造方法详细信息

Reader

protected Reader()
创建一个新的字符流 reader,其重要部分将同步其自身的 reader。

Reader

protected Reader(Object lock)
创建一个新的字符流 reader,其重要部分将同步给定的对象。
参数:
lock - 要同步的对象。
方法详细信息

read

public int read(CharBuffer target)
         throws IOException
试图将字符读入指定的字符缓冲区。缓冲区可照原样用作字符的存储库:所做的唯一改变是 put 操作的结果。不对缓冲区执行翻转或重绕操作。
指定者:
接口 Readable 中的 read
参数:
target - 要将字符读入的缓冲区
返回:
添加到缓冲区的字符数量,如果此字符源位于缓冲区末端,则返回 -1
抛出:
IOException - 如果发生 I/O 错误
NullPointerException - 如果目标为空
ReadOnlyBufferException - 如果目标是一个只读缓冲区
从以下版本开始:
1.5

read

public int read()
         throws IOException
读取单个字符。在字符可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。

用于支持高效的单字符输入的子类应重写此方法。


返回:
作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误

read

public int read(char[] cbuf)
         throws IOException
将字符读入数组。在某个输入可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。

参数:
cbuf - 目标缓冲区
返回:
读取的字符数,如果已到达流的末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误

read

public abstract int read(char[] cbuf,
                         int off,
                         int len)
                  throws IOException
将字符读入数组的某一部分。在某个输入可用、发生 I/O 错误或者到达流的末尾前,此方法一直阻塞。

参数:
cbuf - 目标缓冲区
off - 开始存储字符处的偏移量
len - 要读取的最多字符数
返回:
读取的字符数,如果已到达流的末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误

skip

public long skip(long n)
          throws IOException
跳过字符。在某个字符可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。

参数:
n - 要跳过的字符数
返回:
实际跳过的字符数
抛出:
IllegalArgumentException - 如果 n 为负。
IOException - 如果发生 I/O 错误

ready

public boolean ready()
              throws IOException
判断是否准备读取此流。

返回:
如果保证下一个 read() 不阻塞输入,则返回 True,否则返回 false。注意,返回 false 并不保证阻塞下一次读取。
抛出:
IOException - 如果发生 I/O 错误

markSupported

public boolean markSupported()
判断此流是否支持 mark() 操作。默认实现始终返回 false。子类应重写此方法。

返回:
当且仅当此流支持此 mark 操作时,返回 true。

mark

public void mark(int readAheadLimit)
          throws IOException
标记流中的当前位置。对 reset() 的后续调用将尝试将该流重新定位到此点。并不是所有的字符输入流都支持 mark() 操作。

参数:
readAheadLimit - 在仍保留该标记的情况下,对可读取字符数量的限制。在读取这样多的字符后,尝试重置流可能会失败。
抛出:
IOException - 如果该流不支持 mark(),或者发生一些其他 I/O 错误

reset

public void reset()
           throws IOException
重置该流。如果已标记该流,则尝试在该标记处重新定位该流。如果已标记该流,则以适用于特定流的某种方式尝试重置该流,例如,通过将该流重新定位到其起始点。并不是所有的字符输入流都支持 reset() 操作,有些支持 reset() 而不支持 mark()。

抛出:
IOException - 如果尚未标记流,或者该标记已失效,或者该流不支持 reset(),或者发生一些其他 I/O 错误

close

public abstract void close()
                    throws IOException
关闭该流并释放与之关联的所有资源。在关闭该流后,再调用 read()、ready()、mark()、reset() 或 skip() 将抛出 IOException。关闭以前关闭的流无效。
指定者:
接口 Closeable 中的 close
抛出:
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());
		}
	}
}



目录
相关文章
|
Java
Java中FileOutputStream类的使用
1.FileOutputStream类的作用 2.FileOutputStream类的使用步骤 (1)导入相关类的包 (2)创建FileOutputStream类对象 (3)写入数据 (4)关流
89 0
|
6月前
|
Java 数据处理 开发者
Java IO流专家级教程:深入理解InputStream/OutputStream和Reader/Writer的内部机制
【6月更文挑战第26天】Java IO流涉及字节流(InputStream/OutputStream)和字符流(Reader/Writer),用于高效处理数据输入输出。InputStream/OutputStream处理二进制数据,常使用缓冲提升性能;Reader/Writer处理文本,关注字符编码转换。两者都有阻塞IO操作,但Java NIO支持非阻塞。示例代码展示了如何使用FileInputStream/FileOutputStream和FileReader/FileWriter读写文件。理解这些流的内部机制有助于优化代码性能。
122 0
|
6月前
|
存储 自然语言处理 Java
Java-File类与IO流(2)
Java-File类与IO流(2)
36 0
|
6月前
|
存储 Java 测试技术
Java-File类与IO流(1)
Java-File类与IO流(1)
36 0
|
Java
Java 中File类的常用方法总结
Java 中File类的常用方法总结
81 0
|
Java
Java IO流之Properties类的详解
Java IO流之Properties类的详解
80 0
|
7月前
|
Java
java使用Class类的getResource方法读取文件遇到的问题和解决方案
java使用Class类的getResource方法读取文件遇到的问题和解决方案
119 0
|
存储 Java Unix
【Java|基础篇】File类和IO流
.File类 File类是Java中用于表示文件或目录的类。它提供了一些方法来操作文件和目录的属性和内容,可以进行文件的创建、删除、重命名等操作。
|
Java 文件存储
Java_File类及其常用方法
Java_File类及其常用方法
98 0