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 ...
随机推荐
- JavaScript浮点运算的问题 (乘法)
<script type="text/javascript"> var get_b_val_final=accMul(get_b_val,100)+"%&qu ...
- PHP加密字符串函数(Discuz内置的)
接触Discuz有一段时间了,一直很喜欢这个论坛程序,确实是一个很不错的程序,灰常值得我们去学习,这里介绍它其中的一个加密函数(含解密)这个加密函数的特点在于,比普通的加密函数多了一个随机密钥 ,可以 ...
- Log4j中配置日志文件相对路径
方法一. 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs ...
- 剑指offer 练习题目
#include <iostream> #include<vector> #include <stack> #include<map> #include ...
- 【LeetCode】168. Excel Sheet Column Title
题目: Given a positive integer, return its corresponding column title as appear in an Excel sheet. For ...
- 【Android Developers Training】 103. 查询当前地点
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- MacTex XeLaTex xdvipdfmx:fatal: pdf_ref_obj(): passed invalid object. 报错的解决方法
在使用MacTex配合TexStudio编译beamer的时候,爆出如下错误, xdvipdfmx:fatal: pdf_ref_obj(): passed invalid object. 结果尝试其 ...
- Mathematica学习笔记2
导入文件中的矩阵 mat = Import["...", "Table"] 转化为向量矩阵(元素为数对) data = Table[{mat[[i, j]], ...
- Spring MVC 项目搭建 -6- spring security 使用自定义Filter实现验证扩展资源验证,使用数据库进行配置
Spring MVC 项目搭建 -6- spring security使用自定义Filter实现验证扩展url验证,使用数据库进行配置 实现的主要流程 1.创建一个Filter 继承 Abstract ...
- npm的理解
一 概念方面 npm的全称是node package manger ,是一个nodejs包管理工具,已经成为非官方的发布node模块包的标准.有了npm可以很快速的找到特定服务器要使用的包,进行下载, ...