查看“文本IO”的源代码
←
文本IO
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==Reader和Writer== Java IO中的java.io.Reader和java.io.Writer的工作原理很像InputStream和OutputStream,但不同的是reader和writer是基于字符的,他们是用来用些文本数据的。其类层级结构如图6-13所示。 [[文件:java6-13.png]] 图6-13 字符流结构 Reader用于读取字符流的抽象类。Reader类的常用方法如表6-7所示。 <nowiki>表6-7 Reader类常用方法 方法名 说明 boolean ready() 输入字符流是否可读 int read() 读取一个字符 int read(char[] cbuf) 读取一串字符(到字符数组cbuf) long skip(long n) 跳过n个字符 mark(int readAheadLimit) 在当前位置做一标记 reset() 将读取位置恢复到标记处 close() 关闭字符流</nowiki> Writer是写入字符流的抽象类。Writer类的常用方法如表6-8所示。 表6-8 Writer类常用方法 <nowiki>方法名 说明 void close() 关闭流 void flush() 强行写入 void write(int c) 写入c void write(char[] cbuf) 写入字符数组cbuf void write(char[] cbuf, int off, int len) 写入字符数组cbuf中自位置off开始的len个字符 void write(String str) 写入字符串str void write(String str, int off, int len) 写入字符串str中自位置off开始的len个字符</nowiki> ==FileReader和FileWriter== FileReader:与FileInputStream对应,主要用来读取字符文件,使用缺省的字符编码,常用的构造函数如表6-9所示。 表6-9 FileReader类构造方法 构 造 方 法 说 明 <nowiki>FileReader(File file) 使用File对象创建文件输入流对象,如果文件打开失败,将抛出异常 FileReader(String name) 使用文件名或路径创建文件输入流对象,如果文件打开失败,将抛出异常 FileWrite:与FileOutputStream对应 ,将字符类型数据写入文件,使用缺省字符编码和缓冲器大小,常用的构造函数如表6-10所示。</nowiki> 表6-10 FileWriter类构造方法 <nowiki>构 造 方 法 说 明 FileWriter(File file) 使用File对象创建文件输出流对象,如果文件打开失败,将抛出异常,必须捕捉 FileWriter(File file, boolean append) 使用File对象创建文件输出流对象,并由参数append指定是否追加,异常情况同上 FileWriter(String name) 直接使用文件名或路径创建文件输出流对象,异常情况同上 FileWriter(String name, boolean append) 直接使用文件名或路径创建文件输出流对象,并由参数append指定是否追加,异常情况同上</nowiki> ==文本读写示例== ===用法一:直接使用 === <nowiki>package main; import java.io.*; import java.util.*; /*本类对应实训: */ public class MainClass { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("reader.txt"); String str = "欢迎来到山东商职"; fw.write(str.toCharArray()); fw.close(); FileReader fr= new FileReader("reader.txt"); char[] c=new char[20]; int hasRead=0; while((hasRead=fr.read(c))!=-1) { System.out.print(new String(c,0,hasRead)); } fr.close(); } }</nowiki> ===用法二:添加异常处理语句 === <nowiki>try{ FileWriter fw = new FileWriter("reader.txt"); String str = "欢迎来到山东商职"; fw.write(str.toCharArray()); fw.close(); }catch (Exception e) { System.out.println("出现异常:"+e); //e.printStackTrace(); } try{ FileReader fr= new FileReader("reader.txt"); char[] c=new char[20]; int hasRead=0; while((hasRead=fr.read(c))!=-1) { System.out.print(new String(c,0,hasRead)); } fr.close(); }catch(Exception e){ System.out.println("出现异常:"+e); } </nowiki> ===用法三:使用try-with-resource自动关闭资源=== 在编写IO操作时经常会忘记关闭IO流,JDK7提供了新的try-with-resource语法来自动关闭IO流,语法格式如下: <nowiki>try(声明和创建资源){ 使用资源来处理文件 }</nowiki> 下面程序使用FileReader和Writer将“Hello World”写入文件reader.txt,并读取打印出来。 <nowiki>public static void main(String[] args) throws IOException { //把内容写入到文件中 try(FileWriter fw = new FileWriter("reader.txt");){ String str = "欢迎来到山东商职"; fw.write(str.toCharArray()); }catch(Exception e){ System.out.println("出现异常:"+e); } //把内容显示在屏幕上 try(FileReader fr= new FileReader("reader.txt")){ char[] c=new char[20]; int hasRead=0; while((hasRead=fr.read(c))!=-1) { System.out.print(new String(c,0,hasRead)); } }catch(Exception e){ System.out.println("出现异常:"+e); } }</nowiki> ==BufferedReader和BufferedWriter== 使用FileRead和FileWriter从文件中逐个地读取/写入字符,效率比较低下,因此一般将该类对象包装到缓冲流(BufferedReader和BufferedWriter)中进行操作。BufferedReader和BufferedWriter与BufferedInputStream和BufferOutputStream操作类似,使用缓冲方式文本读取/写入,初次之外还提供了readLine()和newLine()方法,从而提高了读写的效率。 下面程序使用BufferedReader和BufferedWriter完成文件的写入和读取。 <nowiki>public static void main(String[] args) throws IOException { // 把内容写入到文件中 try (FileWriter fw = new FileWriter("reader.txt"); BufferedWriter bw = new BufferedWriter(fw);) { String str = "hello world"; bw.write(str); bw.newLine(); bw.write("good good study"); } // 把内容显示在屏幕上 try (FileReader fr = new FileReader("reader.txt"); BufferedReader br = new BufferedReader(fr)) { while (br.ready()) { System.out.println(br.readLine()); } } } </nowiki> 返回 [[Java程序设计]]
返回至
文本IO
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息