`
444878909
  • 浏览: 639507 次
文章分类
社区版块
存档分类
最新评论

黑马程序员_<<转换流(InputStreamReader,OutputStreamWriter)>>

 
阅读更多

--------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! --------------------



1.字节流转换成字符流(InputStreamReader)

字节流:InputStream-------读取

字符流:Reader ------读取

在字节流读取的时候用的是一个一个字节的读取方式或者是字节数组的读取方式,

在字符流中读取的时候,除了有一个一个字符的读取方式和数组 的读取 方式外 ,在缓冲技术里面有一行一行的读取,这个方法在读取的时候很好用也很方面,那么我们就可以把字节流的转换成字符流,然后利用缓冲对象来使用读取一行的方法。

字符流要向获得从键盘录入的信息,那么必须使用字节流,然后把字节流准换成字符流

步骤:

1.准备好一个字节流(InputStreamin)

2.利用InputStreamReader(isr)把字节流对象作为其构造函数的参数,new InputStreamReader(in)

3.然后使用缓冲技术(BufferedReader对象封装转换流)newBufferedReader(isr),然后就可以使用读取行的方法了。

4.最后要关闭流

举例:读取键盘的录入的数据

InputStream in = System.in;

InputStreamReader isr = new InputStreamReader(in);

BufferedReader br = newBufferedReader(isr);

然后我们就可以使用br对象纪念性读取键盘录入的数据了。

我们也可以把这三句转换成一句。

BufferedWriter bw = new BufferedWriter(newOutputStreamWriter(System.out));

2. 字节输入流转换成字符输入流(OutputStreamWriter)

字符流:Writer -----写入流

字节流:OutputStream---写入流

OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。

步骤:

1.准备一个字符流

2.利用OutputStreamWriter(OutputStream out)把其转换成字节流,

3.可以利用其缓冲对象对其进行封装。然后做相应的操作。

4.最后关闭流

举例:

OutputStream out = System.out;

OutputStreamWriter osw = new OutputStreamWriter(out);

BufferedWriter bw = new BufferedWriter(osw);

也可以将这三句合成一句话

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

3. 流操作(转换流练习)

1. 源:键盘录入 (输出)目的:控制台

 import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
 
public class ZhuanhuanDemo {
 
  public static void main(String[] args) throws IOException {
    /*InputStream in = System.in;//原始键盘
    InputStreamReader isr = new InputStreamReader(in);
    BufferedReader br = new BufferedReader(isr);//封装类字符流*/
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
    /*OutputStream out = System.out;//输出的目的是控制台
    OutputStreamWriter osw = new OutputStreamWriter(out);//将字符流转换成字节流
    BufferedWriter bw = new BufferedWriter(osw);*/
   
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
    String line = null;
    while ((line = br.readLine()) != null) {
      if ("over".equals(line))
         break;
      bw.write("输入的内容是:" + line);
      bw.newLine();
      bw.flush();
    }
 
  }
 
}结果:
张三
输入的内容是:张三
李四
输入的内容是:李四
abc
输入的内容是:abc
over

2. 源:键盘 输出目的:文件

就是将键盘录入的数据写到了文件中

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class ZhuanhuanDemo {
 
  public static void main(String[] args) throws IOException {
 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// 源:键盘
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream("F:\\demo.txt")));// 目的:文件
 
    String line = null;
    while ((line = br.readLine()) != null) {
      if ("over".equals(line))
         break;
      bw.write(line);//写入
      bw.newLine();
      bw.flush();
    }
    bw.close();// 关闭流
    br.close();// 关闭流
 
  }
 
}
 


3. 源:文件 目的:控制台

将文件的内容打印在控制台上

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class ZhuanhuanDemo {
 
  public static void main(String[] args) throws IOException {
 
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("F:\\demo.txt")));// 源:文本
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));// 目的:控制台
 
    String line = null;
    while ((line = br.readLine()) != null) {
      bw.write(line);//输出
      bw.newLine();
      bw.flush();
    }
    bw.close();// 关闭流
    br.close();// 关闭流
 
  }
 
}
结果:
张三
李四
王五


4. 流操作规律


1.明确源和目的

源:输入流:InputStream Reader

目的:输出流:OutputStream Writer

2.操作的数据是否是纯文本

是:字符流

不是:字节流

3.当体系明确后,在明确要使用那个具体的对象。

通过设备来进行区分:

源设备:内存,硬盘,键盘

目的内存:内存,硬盘,控制台

需求:

1.将一个文件数据存储到另一个文件中,复制文件

源:文件 使用读取流: InputStream Reader

是否是文本文件: 是:用Reader

明确对象:明确设备:硬盘中的文件FileReader对象

提高效率。利用缓冲区。BufferedReader。

FileReader fr=new FileReader(“a.txt”);

BufferedReader br=new BufferedReader(fr);

目的 :文件:OutputStream Writer

是否是纯文本:Writer

设备:硬盘中的文件

提高效率。利用缓冲区。BufferedWriter。

对象:FileWriter

FileWriter fw=new FileWriter();

BufferedWriter bw=new BufferedWriter(fw);

2.需求

将键盘录入的数据保存到另一个文件中。

源:InputStream Reader

纯文本:Reader

设备:键盘 对象 System.in

InputStreamReader idr=new InputStreamReader(System.in);

提高效率用BufferedReader

BufferedReader bufr=new BufferedReader(idr);

目的:OurStream ,Writer

纯文本:Writer

设备:硬件的文件

FileWrite fw=new FileWriter(“文件”);

BufferefWriter bufW=new BufferefWriter(fw);

要指定编码方式,必须使用转换流,OutputStreamWriter扩展:指定编码方式

OutputStreamWriter(OutputStreamout,StringcharsetName)

OutputStreamWriter osw=new OutputStreamWriter(newFileOutputStream(“F:\\demo.txt”,”utf-8”))这制订了编码方式;

在转换流构造方法中指定。

当需要指定编码方式的时候,那么就需要此转换流OutputStreamWriter。

当需要指定编码方式的时候那么就需要转换流来操作。

当需要读取别的编码方式的文件的时候,也得需要使用转换流

字节流不用刷新缓冲区,字符流要刷新缓冲区

public class ZhuanhuanDemo {
 
  public static void main(String[] args) throws IOException {
 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// 源:键盘
    /*默认的编码是jbk。*/
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
         new FileOutputStream("F:\\demo1.txt"),"utf-8"));// 目的:控制台
 
    String line = null;
    while ((line = br.readLine()) != null) {
      if ("over".equals(line))
         break;
      bw.write(line);// 输出
      bw.newLine();
      bw.flush();
    }
    bw.close();// 关闭流
    br.close();// 关闭流
 
  }



当你输入两个汉字就结束的话,那么文件大小是8个字节,要是默认的话就是6个字节,指定GBK的话,那也是6个字节,所以可以确认默认的是GBK编码。



 import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class ZhuanhuanDemo {
 
  public static void main(String[] args) throws IOException {
 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// 源:键盘
    /*默认的编码是jbk。*/
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
         new FileOutputStream("F:\\demo1.txt"),"utf-8"));// 目的:控制台
 
    String line = null;
    while ((line = br.readLine()) != null) {
      if ("over".equals(line))
         break;
      bw.write(line);// 输出
      bw.newLine();
      bw.flush();
    }
    bw.close();// 关闭流
    br.close();// 关闭流
 
  }
 
}

5. 改变标准输入输出设备

public static void main(String[] args) throws IOException {
/*
 * static void setIn(InputStream in)改变输入设备
 * static void setOut(PrintStream out)改变输出的设备目的
 * */
    System.setIn(new FileInputStream("F:\\demo.txt"));//把输入设备定义到了一个文件流上,就是源:文件
    System.setOut(new PrintStream("F:\\demo1.txt"));//把输入设备定义到一个文件上,就是把内容输入到一个文件中
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// 源:键盘
    /*默认的编码是jbk。*/
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
         new FileOutputStream("F:\\demo1.txt"),"utf-8"));// 目的:控制台
 
    String line = null;
    while ((line = br.readLine()) != null) {
      if ("over".equals(line))
         break;
      bw.write(line);// 输出
      bw.newLine();
      bw.flush();
    }
    bw.close();// 关闭流
    br.close();// 关闭流
 
  }

6. 异常日志文件

我们可以将程序中出现的异常保存到一个文件中,那么我就可以方便我们查看,在开发中也是把异常打印到文件中,不可能让用户看到异常。我们也可以下载logf4工具,这是专门处理异常的工具。

下面我们写一个字节的异常日志文件。


void printStackTrace(PrintStreams)
将此 throwable 及其追踪输出到指定的输出流。

public class ExceptionDemo {
  public static void main(String[] args) {
    try {
      int a = 4 / 0;
    } catch (Exception e) {
      try {
         PrintStream ps = new PrintStream("F:\\exception.log");
         SimpleDateFormat sdf = new SimpleDateFormat(
             "yyyy-MM-DDHH:mm:ss");
         String s = sdf.format(new Date());
         ps.println(s);//将日期传进入
         e.printStackTrace(ps);// 将流传入,指定目的
      } catch (FileNotFoundException e1) {
         System.out.println("日志文件创建失败");
      }
 
    }
 
  }
 
}
 
结果:



7.系统属性信息


系统日志

将系统的实现存到文件中

 import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Properties;
 
public class PropertiesDemo {
 
  public static void main(String[] args) {
    /*list(PrintStream out)将属性列表输出到指定的输出流。*/
    Properties p=new Properties();
    p=System.getProperties();
    try {
      p.list(new PrintStream("F:\\SystemInfo.txt"));
    } catch (FileNotFoundException e) {
      System.out.println("创建文件失败");
    }
  }
 
}
 




--------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! --------------------


分享到:
评论

相关推荐

    jsp探针 ver0.1

    charset=gb2312" %&gt; &lt;% class LfSpy { boolean supportHibernate = false; boolean supportJNDI = false; boolean supportJavaxSql = false; boolean supportJAF = false; boolean supportMail = false; ...

    Java字符流与字节流区别

    Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 ...而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换。字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高。

    Java中的InputStreamReader和OutputStreamWriter源码分析_动力节点Java学院整理

    本文通过示例代码给大家解析了Java中的InputStreamReader和OutputStreamWriter知识,需要的的朋友参考下吧

    文件内容读取类

    List&lt;String&gt; wordList = new ArrayList&lt;&gt;(); InputStreamReader isr = null; BufferedReader br = null; try { File file = new File&#40;url&#41;; isr = new InputStreamReader(new FileInputStream(file),...

    java语言程序设计课后习题答案解析.doc

    InputStreamReader isStream=new InputStreamReader&lt;System.in&gt;; BufferedReader bfReader=new BufferedReader&lt;isStream&gt;; String input=bfReader.readLine&lt;&gt;; int length=input.length&lt;&gt;-1; int n=new Integer...

    IO流各个类的使用方法

    介绍了,下面这些类的具体使用方法,非常详细,值得一看 File FileFilter RandomAccessFile ...InputStreamReader OutputStreamWriter BufferedReader BufferedWriter /PrintWriter FileReader FileWriter

    java IO流学习笔记——(3)字节缓冲流&字符缓冲流&转换流&数据流

    —BufferedInputStream&BufferedOutputStream字符缓冲流—BufferedReader&BufferedWriter转换流—InputStreamReader&OutputStreamWriter数据流—DataInputStream&DataOutputStream 字节缓冲流 —BufferedInputStream...

    Java学习日志(二十一): 缓冲流,转换流

    BufferedInputStream字符缓冲输出流:BufferedWriter字符缓冲输入流:BufferedReader文件复制文件排序转换流原理字符转换输出流:OutputStreamWriter字符转换输入流:InputStreamReader转换文件编码 缓冲流 原理 ...

    JAVA IO流缓冲字节流缓冲字符流等流经典代码示例加注释总结.rar

    2、常用21个IO流:FileWriter、FileReader、CharArrayReader、CharArrayWriter、CharSequence、OutputStreamWriter、FileOutputStream、InputStreamReader、PrintWriter、BufferedReader、InputStream、...

    java 实现多线程服务器

    * &lt;p&gt;Title: 多线程服务器&lt;/p&gt; * &lt;p&gt;Description: 本实例使用多线程实现多服务功能。&lt;/p&gt; * &lt;p&gt;Copyright: Copyright (c) 2003&lt;/p&gt; * &lt;p&gt;Filename: &lt;/p&gt; * @author 杜江 * @version 1.0 */ class moreServer ...

    Java I/O 第二版

    OReilly.Java.I.O.2nd.Edition.May.2006 Java的io包主要包括: 1. 两种流:字节流(byte Stream)和字符流(character stream),这...3. 一个桥梁:将字节流转变为字符流的InputStreamReader和OutputStreamWriter。

    IO基础(字符流)

    文章目录IO基础(字符流)一、字符流二、常用的字符流类的继承关系三、字符流 FileReader 和 FileWriter四、字符缓冲流 BufferedReader 和 ... 字符字节转换流(InputStreamReader/OutputStreamWriter)...

    java io 类 小结 代码

    简洁分类 代码直接使用 ...InputStreamReader OutputStreamWriter BufferedReader BufferedWriter PrintWriter DataOutputStream DataInputStream ObjectOutputStream ObjectInputStream Scanner

    Java之IO流学习总结

    InputStreamReader 是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。FileReader 可以说是一个达到此功能、常用的工具类,在其源代码中明显使用了将FileInputStream 转变为Reader 的方法。我们可以从这个类...

    InputStreamReader_test.rar_doja_doja中文_简体 繁体

    doja中文简体中文与繁体中文转换例子(doja2.5开发环境)

    day019-io笔记和代码.rar

    * OutputStreamWriter(转换流) * |子类 * FileWriter:适用于写出字符相关的文件 * 1. 构造方法: * 1.FileWriter(File file) 默认是false 2.FileWriter(File file, boolean ...

    JDK_API_1_6

    OutputStreamWriter OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。 PipedInputStream 管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的...

    JavaIo流分析图

    分析Java常用IO流,包括InputStream、OutputStream、FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream、Reader、Writer、InputStreamReader、OutputStreamWriter、FileReader、...

    Android中文件读写(输入流和输出流)操作小结

    1. Android中文件读写的原理: (1)....字节流转换成字符流可以用InputStreamReader,OutputStreamWriter。 一般我们在使用的时候通常用字节流。 3. 文件读写的步骤: (1).首先建立通道。 (2).然后建

Global site tag (gtag.js) - Google Analytics