,福州Java开发工程师工作,Java开发工程师工资多少,Java开发工程师创业,福建师范大学Java开发工程师,闽江学院Java开发工程师,闽江学院海峡学院Java开发工程师,福州墨尔本理工职业学院Java开发工程师,华南女子学院Java开发工程师,福州大学Java开发工程师,福建师范大学协和学院Java开发工程师"/>

11.Java中的IO流(二)——转换流、流操作规律和File对象【Java学习笔记Hatter】Java开发工程师

/ 福州大学环境科学与工程学院Java开发工程师 / 2017-03-11

public static void main(String[] args) {</span></p><p><span style=

" src="http://fishcooimg.chinazspeed.com/2017/03/1489227444001.png" title="Java中的IO流(二)——转换流、流操作规律和File对象.png" alt="Java中的IO流(二)——转换流、流操作规律和File对象.png"/>

一、转换流

readLine方法是字符流BufferedReader类中的方法;

而键盘录入的read方法是字节流是InputStream的方法。


读取转换流

InputStreamReader(System.in):是字节流通向字符流的桥梁。

写入转换流

OutputStreamWriter(System.out)


例1:

public class TransStreamDemo {


public static void main(String[] args) throws IOException {


BufferedReader bfr=

new BufferedReader(new InputStreamReader(System.in));


BufferedWriter br=

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


String line=null;


while((line=bfr.readLine())!=null){

if("over".equals(line))

break;


br.write(line.toUpperCase());

br.newLine();

br.flush();

}

bfr.close();

}

}


例2:

public class TransStreamDemo2 {

/*源:键盘录入

 * 目的:文件

 * 需求:想把键盘录入的数据存储到一个文件中

 *

 */

public static void main(String[] args) throws IOException {


BufferedReader bfr=

new BufferedReader(new InputStreamReader(System.in));


BufferedWriter bfw=

new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt")));


String line=null;


while((line=bfr.readLine())!=null){

if("over".equals(line))

break;


bfw.write(line.toUpperCase());

bfw.newLine();

bfw.flush();

}

bfr.close();

}

}


二、流操作的基本规律

①明确源和目的;

源:输入流(InputStream ,Reader)

目的:输出流(OutputStream ,Writer)


②明确操作的数据是否是纯文本。

是:用字符流(Reader  Writer)

不是:用字节流(InputStream  OutputStream)


③当体系明确后,再明确要使用哪个具体的对象。

通过设备来进行区分:

源设备包括:内存,硬盘(文件),键盘

目的设备:内存,硬盘(文件),控制台


④是否需要提高效率

是:加入缓冲区技术

例1:

需求:将键盘录入的数据保存到一个文件中

源:InputStream   Reader

是不是纯文本?是 Reader

设备:键盘。对应的对象System.in,为了操作键盘的文本数据方便。转成字符流按字符串操作更方便。就将System.in转换成Reader。即Reader体系的转换流


InputStreamReader isr=new InputStreamReader(System.in);


需要提高效率吗?需要


BufferedReader bfr=new BufferedReader(isr);


目的:OutputStream Writer

是否是纯文本?是Writer

设备:硬盘。一个文件,使用FileWriter

FileWriter fw=new FileWriter("c.txt");

需要提高效率吗?需要

BufferedWriter bfr=new BufferedWriter(fw);


例2:

需求:想要把录入的数据按照指定的编码表utf-8,将数据存到文件中

目的:OutputStream Writer


是否是纯文本?是Writer

设备:硬盘。一个文件


存储时需要加入指定的编码表。而指定的编码表只有转换流可以指定。

所以要使用的对象是OutputStreamWriter,而该转换流对象要接收一个字节输出流,而且还可以操作的文件的字节输出流,FileOutputStream


OutputStreamWriter osw=

        new OutputStreamWriter(new FileOutputStream("c.txt"),"UTF-8");


需要高效吗?

BufferedWriter bw=new BufferedWriter(osw);

所以当涉及到字符编码转换时,需要用到转换流。


例1:

public class TransStreamDemo3 {

/*

 * 需求:将一个文件的数据打印在控制台上

 * 源:文件

 * 目的:控制台

 */

public static void main(String[] args) throws IOException {

BufferedReader bfr=

new BufferedReader(new InputStreamReader(new FileInputStream("Demo.txt")));


BufferedWriter bfw=

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

String line=null;


while((line=bfr.readLine())!=null){

if("over".equals(line))

break;


bfw.write(line.toUpperCase());

bfw.newLine();

bfw.flush();

}

bfr.close();

}

}



例2:

public class TransStreamDemo4 {


public static void main(String[] args) throws IOException {


BufferedReader bfr=

new BufferedReader(new InputStreamReader(System.in));


BufferedWriter bw=

new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8"));


String line=null;


while((line=bfr.readLine())!=null){

if("over".equals(line))

break;


bw.write(line.toUpperCase());

bw.newLine();

bw.flush();

}

bfr.close();

}

}


改变标准输入输出流:

System.setIn(new FileInputStream("c.txt"));

System.setOut(new PrintStream("c.txt"));



IO流异常的日志信息:

public class IOExceptionInfo {


公众号,微信

汇鱼网海峡创乐汇
汇鱼网海峡创乐汇