Java之IO流补充
IO流例子
package com.hanqi.maya.util; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; public class Test3 { public static void main(String[] args) { File file=new File("E:\\ceshi.txt"); File ofile=new File("E:\\cewshi8.txt"); Reader r=null; try { r=new FileReader(file); Writer w=new FileWriter(ofile,true);//true表示追加,不加则原本表示替换 BufferedReader br=new BufferedReader(r); BufferedWriter bw=new BufferedWriter(w); String s=null; while((s=br.readLine())!=null){ System.out.print(s); bw.write(s); bw.flush();//一个好的编程习惯应该在此处使用flush,写入需要用 flush 刷新流,否则会在缓冲区不写入文件 } br.close(); bw.close();//调用该方法前会自动调用 flush } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
文件流(字节流, 字符流)
字节流例子
//字节输入流 //读取内容并输出读取多少字节 package com.zijie; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class TestFileInputStream { public static void main(String[] args) { int b = 0; FileInputStream in = null; try{ in = new FileInputStream("E:\\Java\\0801 流后传 线程\\线程.txt"); } catch(FileNotFoundException e) { System.out.println("找不到指定的文件"); System.exit(-1); } try{ long num = 0; // 返回-1的话就表示已经读到了文件的结尾 while((b = in.read()) != -1) { System.out.print((char)b); num++; } in.close(); System.out.println("\n\n共读取了" + num + "个字节"); } catch(IOException e1) { System.out.println("读取文件时出现异常"); System.exit(-1); } } }
//字节输出流 //复制文件 package com.zijie; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class TestFileOutputStream { public static void main(String[] args) { int b = 0; FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("E:\\Java\\0801 流后传 线程\\线程.txt"); // OutputStream有这个文件就往这个文件里面写, 没有的话就自动创建一个 out = new FileOutputStream("E:\\Java\\0801 流后传 线程\\线程-ceshi.txt"); // 一边读, 一边写 while ((b = in.read()) != -1) { out.write(b); } } catch (FileNotFoundException e) { System.out.println("找不到指定文件"); System.exit(-1); } catch (IOException e) { System.out.println("文件复制出错"); System.exit(-1); } System.out.println("文件成功复制"); } }
字符流例子
//字符输入流 //读取文件内容 package com.zifu; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class TestFileReader { public static void main(String[] args) { FileReader fr = null; int c = 0; try { fr = new FileReader("E:\\Java\\0801 流后传 线程\\线程.txt"); while ((c = fr.read()) != -1) { System.out.print((char) c); } fr.close(); } catch (FileNotFoundException e) { System.out.println("文件未找到"); System.exit(-1); } catch (IOException e) { System.out.println("读取文件时出现异常"); System.exit(-1); } } }
//字符输入流 //不断写入int型,写入为ASCII表 package com.zifu; import java.io.FileWriter; import java.io.IOException; public class TestFileWriter { public static void main(String[] args) { FileWriter fw = null; try { fw = new FileWriter("E:\\Java\\0801 流后传 线程\\线程-ceshi1.txt"); for (int i = 1; i <= 50000; i++) { fw.write(i); } } catch (IOException e) { System.out.println("写入文件出错 !"); System.exit(-1); } } }
缓冲流
package com.buffer; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class TestBufferStream { public static void main(String[] args) { byte[] bb = new byte[50]; try { FileInputStream fis = new FileInputStream("E:\\Java\\0801 流后传 线程\\ceshi.txt"); BufferedInputStream bis = new BufferedInputStream(fis);//将文件字节流,转换成带缓冲的输入字节流 int c = 0; System.out.println((char)bis.read()); System.out.println((char)bis.read()); /* while((c = bis.read()) != -1) { System.out.print((char)c+", "); }*/ // 标记到第30的位置再开始读数据 bis.mark(100);//见的总承包 mark的方法 InputStream for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++) { System.out.print((char)c); } System.out.println(); // 回到mark标记的那个地方 bis.reset();//见的总承包reset的方法InputStream 。 for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++) { System.out.print((char)c); } bis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
package com.buffer; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class TestBufferRW { public static void main(String[] args) { try { BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\Java\\0801 流后传 线程\\ceshi.txt")); BufferedReader br = new BufferedReader(new FileReader("E:\\Java\\0801 流后传 线程\\ceshi.txt")); String s = null; for (int i = 0; i < 100; i++) { s = "" + Math.random(); //bw.write(s); bw.append(s);//写入文件 bw.newLine(); } bw.flush(); // 特别好用的方法, readLine while((s = br.readLine()) != null) {//获取文件内容输出到控制台 System.out.println(s); } br.close(); bw.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
转换流 convert--->字节-字符
打印当前系统的字符编码:
System.out.println(osw.getEncoding());
package com.convert; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; public class TestTranForm1 { public static void main(String[] args) { OutputStreamWriter osw = null; try { osw = new OutputStreamWriter(new FileOutputStream("E:\\Java\\0801 流后传 线程\\ceshi.txt")); osw.write("山东淄博");//写入文件 // 默认使用当前系统的字符编码 System.out.println(osw.getEncoding()); osw.close(); // FileOutputStream加第二个参数true表示追加内容 osw = new OutputStreamWriter(new FileOutputStream("E:\\Java\\0801 流后传 线程\\ceshi.txt", true), "utf-8");//更改字符编码 osw.write("qwerttttt"); System.out.println(osw.getEncoding()); osw.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
阻塞式方法
获取输入的内容转换成大写,如果输入的 exit 退出
package com.convert; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class TestTranForm2 { public static void main(String[] args) { try { InputStreamReader isr = new InputStreamReader(System.in);//包一层字符流 BufferedReader br = new BufferedReader(isr);//在包一层缓冲字符流 String s = null; s = br.readLine();//从字符流读取一行,你写入的内容 while(s != null) { if(s.equalsIgnoreCase("exit")) {//忽略大小写的相同 break; } System.out.println(s.toUpperCase());//将字符串转换成大写在控制台输出 s = br.readLine();//再次获取输入的内容 } br.close(); // 阻塞式方法(同步方法---不输入就不能干别的) } catch (IOException e) { e.printStackTrace(); } } }
数据流--->八大数据类型
package com.data; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; public class TestDataStream { public static void main(String[] args) { ByteArrayOutputStream baos = new ByteArrayOutputStream();//字节数组输出流 DataOutputStream dos = new DataOutputStream(baos);//数据处理流,这个流可以直接写入基础数据类型 try { dos.writeDouble(Math.random()); dos.writeBoolean(true); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());//将输出流转换为字节数组 System.out.println(bais.available());//里面包含的所有数据的长度 DataInputStream dis = new DataInputStream(bais); /* * 先进先出---队列 * 先进后出---栈 */ System.out.println(dis.readDouble());//数据流可以直接读取基本数据类型 System.out.println(dis.readBoolean()); dos.close(); dis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
print流 打印流--->System.out.println();
package com.print; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; public class TestPrintStream1 { public static void main(String[] args) { PrintStream ps = null;//打印流 try { FileOutputStream fos = new FileOutputStream("e:\\go\\testprint.txt");//文件字节输出流 ps = new PrintStream(fos); } catch (FileNotFoundException e) { e.printStackTrace(); } if(ps != null) { // 设置默认的输出对象 System.setOut(ps); } for(char c = 0;c<=60000;c++) {//输出6万个字符 System.out.print(c); if(c % 100 == 0) {//输出到文件,不是控制台 System.out.println(); } } } }
定义方法,读取并打印文件
package com.print; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.PrintStream; public class TestPrintStream2 { public static void main(String[] args) { String fileName = "e:\\go\\file.txt"; list(fileName, System.out); } private static void list(String fileName, PrintStream ps) { try { BufferedReader br = new BufferedReader(new FileReader(fileName));//读取文件 String s = null; while((s = br.readLine()) != null) { ps.println(s);//读取并打印 } br.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { ps.println("无法读取文件 !"); e.printStackTrace(); } } }
模拟日志效果
输入内容,打印,并用分割线分开,最后打印当前日期
package com.print; import java.io.BufferedReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.Date; public class TestPrintStream3 { public static void main(String[] args) { String s = null; BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//字节流转换字符流 PrintWriter pwLog; try { FileWriter fw = new FileWriter("e:\\Java\\Ceshi-stream.log", true);//输出流的位置追加内容 pwLog = new PrintWriter(fw); while((s = br.readLine()) != null) {//获取输入 if(s.equalsIgnoreCase("exit")) { break; } System.out.println(s.toUpperCase());//打印到控制台大写 pwLog.println("---------------------");//打印到文件分割线 pwLog.println(s.toUpperCase());//打印到文件大写 pwLog.flush(); } pwLog.println("========== " + new Date() + " ===================");//结束后打印当前日期 pwLog.flush(); pwLog.close(); } catch (IOException e) { e.printStackTrace(); } } }
Object流
package com.object; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class TestObjectStream { public static void main(String[] args) { try { Test t = new Test();//实例化,自定义的类 t.i += 5; FileOutputStream fos = new FileOutputStream("E:\\Java\\0801 流后传 线程\\ceshi.txt");//定义输出位置 ObjectOutputStream oos = new ObjectOutputStream(fos);//对象处理流包起来 oos.writeObject(t);//将对象写入到文件 oos.flush(); oos.close(); FileInputStream fis = new FileInputStream("E:\\Java\\0801 流后传 线程\\ceshi.txt");//将文件读出来 ObjectInputStream ois = new ObjectInputStream(fis); Test tread = (Test)ois.readObject(); System.out.println(tread); ois.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } // Serializable--标记型接口, 没有实际的方法, 知识用来表示这个类可以被序列化 class Test implements Serializable { private static final long serialVersionUID = 1L; String name = "hanqi"; int i = 3; int j = 15; transient double d = 12.345; // 透明的, 表示这个属性在写入流的时候不予考虑 @Override public String toString() { return "Test [name=" + name + ", i=" + i + ", j=" + j + ", d=" + d + "]"; } }
Java之IO流补充的更多相关文章
- Java基础-IO流对象之字符类(FileWrite与FileReader)
Java基础-IO流对象之字符类(FileWrite与FileReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常见编码简介 1>ASCII 我们知道计算机是 ...
- java的IO流
java的IO流继承四大抽象类分别是字节流 inputStream outputStream与字符流 read write.怎么理解记忆很重要. 直接连接读写对象的是结点流,例如对文件读取字节类的名字 ...
- Java基础——IO流
今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...
- 【Java】IO流简单分辨
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827509.html Java的IO流体系十分庞大,并且体系层次稍复杂,很容易记混或记错.在此,我把平时经常用 ...
- Java - 文件(IO流)
Java - 文件 (IO) 流的分类: > 文件流:FileInputStream | FileOutputStream | FileReader | FileWriter ...
- Java中IO流的总结
有关Java中IO流总结图 流分类 按方向分 输入流 输出流 按单位分 字节流 字符流 按功能分 节点流 处理流(过滤流) 其他 所有的流继承与这四类流:InputSteam.OutputStream ...
- JAVA中IO流总结
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42119261 我想你对JAVA的IO流有所了解,平时使用的 ...
- 第15章-输入/输出 --- 理解Java的IO流
(一)理解Java的IO流 JAVA的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出(键盘.文件.网络连接等)抽象表述为"流"( ...
- Java基础IO流(二)字节流小案例
JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...
随机推荐
- ubuntu忽然不能登录,输入密码正确一直返回登录界面
问题描述 由于配置eclipse命令启动,我修改了 /etc/environment 文件的内容,用命令 shutdown -r -now 重启后,输入密码正确一直返回登录界面. 查了下网上资料:系统 ...
- MongoDB--GridFS 文件存储系统
GridFS是Mongo的一种专门用存储小型文件的功能. 使用于下列场景: 1.写入文件:mongofiles put 文件路径 注意,当前mongo实例链接的哪个库,将写文件在哪个实例里面的grid ...
- phpcms v9模版调用代码
首页调用栏目{pc:content action="category" siteid="$siteid" num="15" order=&q ...
- 通过 pxe(网络安装)完成centos 系统的网络安装
首先交代环境.本地2台主机,一台windows主机,一台等待安装centos的主机.2台主机在同一个局域网.通过路由器自动获取ip上网. 网上大多数pxe安装方式都采用自己搭建dns服务器的方式来进行 ...
- Hibernate的使用
1 创建一个Java项目,在项目中新建一个lib,将需要的Hibernate包和MySQL包导入,并Build Path 2 在src下添加Hibernate.cfg.xml在此文件中对Hiberna ...
- Intellij IDEA 2017集成MyBatis三剑客
MyBatis三剑客指的是:MyBatis-Generate.Mybatis Plus.MyBatis-PageHelper MyBatis-Generate 使用 Mybatis Generator ...
- chrome 浏览器最小字体为12px 的解决办法
http://banri.me/web/webkit-text-size-adjust.html 对div进行缩放 12*0,75 = 9 px -webkit-transform: scale(0. ...
- zepto的使用方法
有些不了解zepto的同学在刚接触的时候肯定有很多疑惑,这个东西怎么用啊,去哪里下载啊,什么时候该用什么时候不该用啊,其实我以前也是这样的.jquery使用多了那么就让我们一起来了解下zepto把. ...
- Java基础(6)- 面向对象解析
java面向对象 对象 知识点 java 的方法参数是按值调用,是参数的一份拷贝 封装 使用private将 属性值/方法 隐藏,外部只能调用 get,set方法/非private 的接口 获取 重载 ...
- h5 新增的invalid事件,貌似有很大bug
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...