java中的IO操作

来源:互联网 发布:json eval 编辑:程序博客网 时间:2024/04/30 14:25

BufferedReader(new FileReader( )) 从文件输入数据

//注意 new BufferedReader(new FileReader("2.txt"));

============================================

String fileName;
  File file=new File("E:/"+fileName);
  BufferedReader bufferedReader=new BufferedReader(new FileReader(file));
中是不是指FileReader的实例对象将fileName文件中的字符读到缓存区,然后BufferedReade的对象将缓存的数据读到程序中。是这样理解吗?如果没有FileReader会怎么样。谢谢
--------------------------------
简单地说java的IO包使用包装器模式设计的,也就是说用FileReader包装了File,又用BufferedReader包装了FileReader,才可以用BufferedReader。BufferedReader不能直接包装File,所以说没有FileReader的话应该会编译不了,因为BufferedReader的构造函数的参数就没有File类型的。

====================================
 
BufferedReader   由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取分行文本很适合,BufferedReader是针对Reader的,不直接针对文件,也不是只针对文件读取。

    FileReader是由java.io.InputStreamReade扩展来的,是针对文件读取的。

    实际使用时往往用 BufferedReader bfrTemp = new BufferedReader(new FileReader("test.conf"));先建立一个文件reader,再用BufferedReader读。

    FileInputStream   扩展自java.io.InputStream,InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。用Reader读取出来的是char数组或者String   ,使用InputStream读取出来的是byte数组。(读汉字往往是乱码...)


InputStreamReader控制台下的输入流

private BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
-------------------------------------

System.in:
默认的标准输入流  public static final InputStream in
The "standard" input stream. This stream is already open and ready to supply input data. Typically this stream corresponds to keyboard input or another input source specified by the host environment or user.

InputStream  - 字节流
此抽象类是表示字节输入流的所有类的超类
reader   - 字符流
InputStreamReader  - 将字节流转换成字符流,是上面两者的转换类。
是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。 
每次调用 InputStreamReader 中的一个 read()() 方法都会导致从基础输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从基础流读取更多的字节,使其超过满足当前读取操作所需的字节

---------------------------------------------
java输入输出流,使用了装饰模式
inputstream是最原始的,专注了核心功能
而inputstreamreader是核心功能的装饰,提供了更封装的方法

inputstream只能读字节,byte数组,而有reader的可以读char
如果在reader上再装饰一层buffered,那么就可以读取 string ——>方法是 readline()


PrintWriter 数据写回文件

// Create PrintWriter for the file
PrintWriter out = new PrintWriter(new FileWriter(sourceName));

-------------------------------------------------------

1. 前面介绍过PrintStream,它可以将Java的基本数据类型等数据,直接转换为系统默认编码下对应的字符,再输出。而这里要介绍的java.io.PrintWriter在功能上与PrintStream类似,除了接受OutputStream实例作为变量之外,PrintWriter还可以接受Writer对象作为输出的对象。当原先是使用Writer对象在作字符处理,而现在想要套用println()之类的方法时,使用PrintWriter会是比较方便的做法。
2. 下面的示例显示了PrintStream和PrintStream两个对象在处理相同输出目的时的作法,程序会输出简体中文GB2312编码的文字至指定的文件中。
http://xyiyy.iteye.com/blog/361518

原创粉丝点击