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)的更多相关文章

  1. java-IO流-字符流-FileReader、FileWriter、自定义小数组的拷贝、BufferedReader、BufferedWriter、readLine()和newLine()方法、LineNumberReader、使用指定的码表读写字符

    ###21.01_IO流(字符流FileReader) * 1.字符流是什么     * 字符流是可以直接读写字符的IO流     * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要 ...

  2. Java IO流字符流简介及基本使用

    Java IO流字符流简介及常用字符流的基本使用 字符流分为输入字符流(Writer)和输出字符流(Reader),这两种字符流及其子类字符流都有自己专门的功能.在编码中我们常用的输出字符流有File ...

  3. Java IO: 其他字符流(下)

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...

  4. 【Java基础】【21IO(字符流)&字符流其他内容&递归】

    21.01_IO流(字符流FileReader) 1.字符流是什么 字符流是可以直接读写字符的IO流 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写 ...

  5. JavaSE18-字节缓冲流&字符流

    1.字节缓冲流 1.1 字节缓冲流构造方法 字节缓冲流介绍 BufferOutputStream:该类实现缓冲输出流. 通过设置这样的输出流,应用程序可以向底层输出流写 入字节,而不必为写入的每个字节 ...

  6. java 输入输出IO流 字符流 FileWriter FileReader

    为什么要使用字符流 当使用字节流读取文本文件时,可能会有一个小问题.就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储.所以Java提供一些字符流类,以字符为单位读写 ...

  7. Java IO之字符流和文件

    前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...

  8. [Java IO]03_字符流

    Java程序中,一个字符等于两个字节. Reader 和 Writer 两个就是专门用于操作字符流的类. Writer Writer是一个字符流的抽象类.  它的定义如下: public abstra ...

  9. IO流--字符流与字节流--File类常用功能

    IO流的常用方法: 1: 文件的读取和写入图解: 2:字节流: 读写文件的方法: 一般效率读取: 读取文件:        FileInputStream(); 写数据:            Fil ...

随机推荐

  1. MySQL的NULL值处理

    我们已经知道MySQL使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作. 为了处理这种情况,MySQL提供了 ...

  2. onSaveInstanceState()和onRestoreInstanceState()方法

    Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate().onPause()等生命周期方 ...

  3. SOJ 1210 二叉树

    1210. 二叉树 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description 在众多的数据结构中,二叉树是一种特殊而重要的结构,有 ...

  4. 《Intel汇编第5版》 Intel CPU小端序

    一.MASM汇编器中的数据类型 二.Intel汇编中的立即数类型 三.定义有符号和无符号整数 四.小端序 内存中数据按照字节存储,一个4个字节无符号整数,其高位存储在低地址上,低位存储在高地址上. 比 ...

  5. PerformSelector 和 NSInvocation

  6. Django的用户认证

    Django中用户登陆的实例: 逻辑流程 1.客户端发起请求,根据url规则会首先转至index函数, 2.在index函数上添加一个装饰器('@login_required',django自带).加 ...

  7. Chapter 14_4 使用_ENV

    因为_ENV是一个普通的变量,我们可以像其他变量一样去对它进行赋值和访问. _ENV = nil 上面的赋值操作,将会使得在它之后的代码块不能直接访问全局变量.不过,对控制你的代码所使用的变量有用处. ...

  8. jvm的可见性的理解

    同步包括两方面的含义: 独占性和可见性. 很多人仅仅理解了独占性,而忽略了可见性. 根据Java Language Specification中的说明, jvm系统中存在一个主内存(Main Memo ...

  9. SpringMVC 的重定向时,参数非法问题

    在重定向时,携带的参数出现非法 /shopping/editShippingAddressCart?cs=0eaa49d6-9c6e-4d02-85d0-40c3c7939207|ef9d80b1-7 ...

  10. SpringMVC利用Hibernate validator做字段验证

    1.添加Hiberbate validator相关的jar包 2.字需要验证的formbean 上添加验证的注解,内置注解有: dBean Validation 中内置的 constraint @Nu ...