IO流---字符流(FileWriter, FileReader ,BufferedWriter,BufferedReader)
IO Input Output
IO流用来处理设备之间的数据传输。
java对数据的操作是通过流来实现的。
流按流向分:输入流,输出流 是相对内存而言的。把硬盘的数据读取到内存中就是输入流。
输入流就是读操作,输出流就是写操作。
流按操作数据分两种:字节流,字符流
字节流对象可以处理所有的数据。
字符流的由来: 字节流读取字节数据后,不直接操作,而是先查指定的编码表,获取对应的文字。在对这个文字进行操作,简单的说就是 字节流+编码表
IO流的四个顶层基类
字节流的两个顶层父类(抽象基类):
InputStream
OutputStream
字符流的两个顶层父类(抽象基类)
Reader
Writer
文件拷贝
方法一:
public static void main(String[] args) throws IOException { //1,读取一个已有的文本文件,使用字符读取流和文件相关联。 FileReader fr = new FileReader("IO流_2.txt"); //2,创建一个目的,用于存储读到数据。 FileWriter fw = new FileWriter("copytext_1.txt"); //3,频繁的读写操作。 int ch = 0; while((ch=fr.read())!=-1){ fw.write(ch); } //4,关闭流资源。 fw.close(); fr.close(); }
方法二:
private static final int BUFFER_SIZE = 1024; /** * @param args */ public static void main(String[] args) { FileReader fr = null; FileWriter fw = null; try { fr = new FileReader("IO流_2.txt"); fw = new FileWriter("copytest_2.txt"); //创建一个临时容器,用于缓存读取到的字符。 char[] buf = new char[BUFFER_SIZE];//这就是缓冲区。 //定义一个变量记录读取到的字符数,(其实就是往数组里装的字符个数 ) int len = 0; while((len=fr.read(buf))!=-1){ fw.write(buf, 0, len); } } catch (Exception e) { // System.out.println("读写失败"); throw new RuntimeException("读写失败"); }finally{ if(fw!=null) try { fw.close(); } catch (IOException e) { e.printStackTrace(); } if(fr!=null) try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } }
字符流的缓冲区:提高了对数据的读写效率,缓冲区要结合流才可以使用,在流的基础上对流的功能进行了增强。
对应的类是:前缀对应功能,后缀对应所属的体系
BufferedWriter
BufferedReader
FileWriter fw = new FileWriter("buf.txt");
//为了提高写入的效率。使用了字符流的缓冲区。
//创建了一个字符写入流的缓冲区对象,并和指定要被缓冲的流对象相关联
BufferedWriter bufw = new BufferedWriter(fw);
bufw.write("xixiixii");
//使用缓冲区的刷新方法将数据刷目的地中。
bufw.flush();
//关闭缓冲区。其实关闭的就是被缓冲的流对象fw。
bufw.close();
关之前会刷一次,但是最好手动调用一下,关目的是关闭资源。
BufferedWriter提供了换行的方法 newLine()
BufferedReader :
FileReader fr = new FileReader("buf.txt"); BufferedReader bufr = new BufferedReader(fr); String line = null; while((line=bufr.readLine())!=null){ System.out.println(line); } bufr.close();
之前的读方法:
public static void demo() throws FileNotFoundException, IOException { FileReader fr = new FileReader("buf.txt"); char[] buf = new char[1024]; int len = 0; while((len=fr.read(buf))!=-1){ System.out.println(new String(buf,0,len)); } fr.close(); }
BufferedWriter
newLine方法
BufferedReader
readLine方法
文本拷贝方式三:使用缓存区
public static void main(String[] args) throws IOException { FileReader fr = new FileReader("buf.txt"); BufferedReader bufr = new BufferedReader(fr); FileWriter fw = new FileWriter("buf_copy.txt"); BufferedWriter bufw = new BufferedWriter(fw); String line = null; while((line=bufr.readLine())!=null){ bufw.write(line); bufw.newLine(); bufw.flush(); } bufw.close(); bufr.close();
装饰设计模式:
对一组对象的功能进行增强时,就可以使用该模式来解决问题。
BufferedReader有个子类LineNumberReader,可以获取行号
IO流---字符流(FileWriter, FileReader ,BufferedWriter,BufferedReader)的更多相关文章
- java-IO流-字符流-FileReader、FileWriter、自定义小数组的拷贝、BufferedReader、BufferedWriter、readLine()和newLine()方法、LineNumberReader、使用指定的码表读写字符
###21.01_IO流(字符流FileReader) * 1.字符流是什么 * 字符流是可以直接读写字符的IO流 * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要 ...
- Java IO流字符流简介及基本使用
Java IO流字符流简介及常用字符流的基本使用 字符流分为输入字符流(Writer)和输出字符流(Reader),这两种字符流及其子类字符流都有自己专门的功能.在编码中我们常用的输出字符流有File ...
- Java IO: 其他字符流(下)
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...
- 【Java基础】【21IO(字符流)&字符流其他内容&递归】
21.01_IO流(字符流FileReader) 1.字符流是什么 字符流是可以直接读写字符的IO流 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写 ...
- JavaSE18-字节缓冲流&字符流
1.字节缓冲流 1.1 字节缓冲流构造方法 字节缓冲流介绍 BufferOutputStream:该类实现缓冲输出流. 通过设置这样的输出流,应用程序可以向底层输出流写 入字节,而不必为写入的每个字节 ...
- java 输入输出IO流 字符流 FileWriter FileReader
为什么要使用字符流 当使用字节流读取文本文件时,可能会有一个小问题.就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储.所以Java提供一些字符流类,以字符为单位读写 ...
- Java IO之字符流和文件
前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...
- [Java IO]03_字符流
Java程序中,一个字符等于两个字节. Reader 和 Writer 两个就是专门用于操作字符流的类. Writer Writer是一个字符流的抽象类. 它的定义如下: public abstra ...
- IO流--字符流与字节流--File类常用功能
IO流的常用方法: 1: 文件的读取和写入图解: 2:字节流: 读写文件的方法: 一般效率读取: 读取文件: FileInputStream(); 写数据: Fil ...
随机推荐
- Java Object 对象拷贝
Java Object 对象拷贝 @author ixenos JAVA 对象拷贝 Java里的clone分为: 1.浅拷贝:浅复制仅仅复制所考虑的对象,而不复制它所引用的对象,Object类里的c ...
- navicat 连接远程mysql
01putty中session---远程地址(程序访问的域名) ,端口22--load加载进来 02SSH--Auth-Tunnels(隧道)-- putty端口映射SSH--Auth-Tunnels ...
- TypeError: document.getELementById is not a function
这个错误困扰了我好几个小时,在网上也百度了好久类似的问题但都没有结果,反反复复看了好多遍,才发现,原来是document.getELementById 里面的Element的字母 l 我写成了大写的L ...
- 广播与P2P通道(下) -- 方案实现
在广播与P2P通道(上) -- 问题与方案 一文中,我们已经找到了最优的模型,即将广播与P2P通道相结合的方案,这样能使服务器的带宽消耗降到最低,最大节省服务器的宽带支出.当然,如果从零开始实现这种方 ...
- c++的输入和输出流
C++编译系统提供了用于输入输出的iostream类库.iostream这个单词是由3个部 分组成的,即i-o-stream,意为输入输出流.在iostream类库中包含许多用于输入输出的 类.常用的 ...
- 仿bmfn 底部
<!DOCTYPE html> <!-- saved from url=(0019)http://www.bmfn.cn/ --> <html class="k ...
- Tomcat7调优及JVM性能优化for Linux环境
标签: tomcat7 jvm 性能 分享到: 出处:http://www.iteye.com 该优化针对Linux X86_X64环境 1. Tomcat优化其实就是对server.xml优化(开户 ...
- iosNSMutableAttributedString 简单操作
// 打印系统中所有字体的类型名字 NSArray *familyNames = [UIFont familyNames]; for(NSString *familyName in fam ...
- C语言_cmd_pause
再C语言里面使用system函数调用pause. system("pause"); 会显示 请按任意键继续. . . system("pause ->nul&q ...
- js第一天 innerHTML和value 的区别
innerHTML在JS是双向功能:获取对象的内容 或 向对象插入内容:如:<div id="aa">这是内容</div> ,我们可以通过 document ...