首页 > 编程 > Java > 正文

Java--IO流转换流

2019-11-06 07:46:10
字体:
来源:转载
供稿:网友

这里写图片描述

package cn.hncu.io.transform;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;/* * 需求:模拟英文聊天程序,要求: (1) 从键盘录入英文字符,每录一行就把它转成大写输出到控制台; (2) 保存聊天记录到字节流文件。 */public class TransformDemo { public static void main(String[] args) { // readTest(); //writeTest(); //完整版演示 File file = new File("files/transform.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//读取用户从键盘输入的数据 BufferedWriter bw = null; try { //下面这个FileOutputStream(String fileName,boolean append);//是否使用追加模式,如果参数为true,则下次我们输入的数据将继续添加到上次的文件末尾 bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))); String strLine = ""; while((strLine=br.readLine())!=null){ if(strLine.equalsIgnoreCase("over") || strLine.equalsIgnoreCase("bye")){ break; } strLine = strLine.toUpperCase(); System.out.PRintln(strLine);//回显给用户看 //拿到了strLine---字符流转换为字节流保存到文件中去---拿到一个字符串写到文件中一个字符串,做到实时更新的效果 bw.write(strLine); bw.newLine(); bw.flush(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { br.close(); bw.close(); } catch (IOException e) { e.printStackTrace(); } } } //StringBuffer比StringBuild()县城更安全----但是在只有一个线程的时候我们一般使用StringBuild private static void writeTest() { /* * 1)需要把字符数据按行保存到字节流文件 ; 2)字符流采用BufferedWriter比较合适,因为它有newLine方法且能实现高效; * 3)字节流文件,得采用FileOutputStream。 * 综上,采用转换流把字符流转成字节流处理比较合理,即使用OutputStreamWriter */ File file = new File("files/transform.txt"); FileOutputStream fout = null; OutputStreamWriter osw = null; BufferedWriter bw = null; try { fout = new FileOutputStream(file); String str = "WO LAI ZI WANG XIN QIU DE WANG XIN REN!"; // 将字符流转换为字节流需要用到转换流来进行操作 osw = new OutputStreamWriter(fout); bw = new BufferedWriter(osw); bw.write(str); bw.newLine();// 写进一个换行符! bw.flush();// 刷流操作 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { fout.close(); osw.close(); bw.close(); } catch (IOException e) { System.out.println("关流失败!"); } } } private static void readTest() { /* * 1)需要从键盘接收录入,得用System.in,它是字节输入流InputStream; * 2)需要处理字符,可以自己把字节强转成字符,也可以用字符流; * 3)需要类似readLine的功能,而这个方法在字符流BufferedReader中有(而且该类有缓冲增速)。 * 综上,采用转换流把字节流转成字符流处理比较合理,即使用InputStreamReader */ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String strLine = ""; try { while ((strLine = br.readLine()) != null) { strLine = strLine.toUpperCase(); System.out.println(strLine); } } catch (IOException e) { e.printStackTrace(); } }}

这里写图片描述

package cn.hncu.io.transform;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;public class TransFromDemo2 { public static void main(String[] args) { //上次我们使用了转换流的将字符和字节进行转换的功能,今天我们来学习转换流的另外一个功能---指定编码格式,拜托编码手系统编码的影响 //demo1(); //demo2(); readDemo3(); } private static void readDemo3() { FileInputStream fin = null; InputStreamReader isr = null; char[] cbuf = new char[512];//将文件中的数据全部写到字符数组当中转换成字符串符输出!!! File file = new File("files/transform2.txt");//files/transform2.txt if(!file.exists()){//预防出异常! System.out.println("文件不存在或者已经被删除..."); return; } try { fin = new FileInputStream(file); isr = new InputStreamReader(fin, "utf-8"); int len = 0; while((len=isr.read(cbuf))!=-1){//一直读取文件中的文件知道读取到文件末尾 System.out.println(new String(cbuf)); } } catch (FileNotFoundException e) { System.out.println("文件不存在或者已经被删除..."); } catch (UnsupportedEncodingException e) { System.out.println("不存在该种编码格式.."); } catch (IOException e) { e.printStackTrace(); }finally{ try { fin.close(); isr.close(); } catch (IOException e) { e.printStackTrace(); } } } private static void demo2() { FileOutputStream fout = null; OutputStreamWriter osw = null; try { fout = new FileOutputStream(new File("files/transform2.txt"), true); osw = new OutputStreamWriter(fout,"utf-8"); osw.write("我是一名大学生,我长大了想为祖国做出自己的贡献!!!"); osw.write("/n"); osw.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { fout.close(); osw.close();//注意小细节:在关闭这个转换流时先要刷新它!!! } catch (IOException e) { e.printStackTrace(); } } } private static void demo1() {//这种只使用FileOutputStream()进行操作的流不能指定编码格式!! FileOutputStream fout = null;//定义到外面方便进行关流 //byte[] buf = new byte[512]; try { fout = new FileOutputStream("files/transform2.txt", true); String strLine = "woshi一名中国共产党,我为我的祖国感到骄傲!!!"; fout.write(strLine.getBytes());//字节流不需要进行刷流操作,但是对于关流操作我们一般养成好习惯!!! //追加模式,即每次添加新的信息时信息会添加到上一次文本的末尾 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { fout.close(); } catch (IOException e) { System.out.println("关流失败!"); } } }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表