黑马程序员_JAVA之IO流(其他IO流)
------- android培训、java培训、期待与您交流!----------
一:转换流
转换流实际上就是字符流
OutputStreamWriter:输出转换流
构造方法:
传入一个相应的字节流,返回一个相应的字符流 而这个字符流就是转换流对象
注意:
在使用过程中:将字节流对象转成字符流对象
在本质上:字符流通向字节流的桥梁
InputStreamReader:输入转换流
构造方法:
传入一个相应的字节流,返回一个相应的字符流 而这个字符流就是转换流对象
注意:
在使用过程中:将字节流对象转成字符流对象
在本质上:字节流通向字符流的桥梁
代码实现:
package cn.itcast2;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter;public class Demo5 {public static void main(String[] args) throws IOException {method();}//转换流作为字符流完成文件复制public static void method() throws IOException {InputStream is = new FileInputStream("g.txt");InputStreamReader isr = new InputStreamReader(is);OutputStream os = new FileOutputStream("h.txt");OutputStreamWriter osw = new OutputStreamWriter(os);int c;while((c=isr.read())!=-1) {osw.write(c);}osw.close();isr.close();} }
二:字节输入输出流
System.in:字节输入流 从控制台读入 名为标准输入流
System.out: 字节输出流 输出到控制台 名为标准输出流
代码实现:
package cn.itcast2;import java.io.IOException; import java.io.InputStream;public class Demo6 {public static void main(String[] args) throws IOException {// OutputStream os = System.out; // os.write(97); // os.write(98); // os.close();InputStream is = System.in;int b;while((b=is.read())!=-1) {System.out.println(b);}is.close();}}
结合前面的IO流,完成需求:从控制台读取,再写到控制台中去
package cn.itcast2;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 Demo7 {public static void main(String[] args) throws IOException {//创建字节流对象InputStream is = System.in;OutputStream os = System.out;//创建字符流对象InputStreamReader isr = new InputStreamReader(is);OutputStreamWriter osr = new OutputStreamWriter(os);//创建高效字符流对象BufferedReader br = new BufferedReader(isr);BufferedWriter bw = new BufferedWriter(osr);//读String line;while((line=br.readLine())!=null) {//定义停止输入的标记字符串if("byebye".equals(line)) {break;}//写bw.write(line);bw.newLine();bw.flush();}//关闭流osr.close();isr.close();}}
三:数据输入输出流
DataOutputStream:数据输出流
public final void writeXxx(xx x) throws IOException 写出XXX类型的数据
DataInputStream:数据输入流
public final byte readXxx(xx x) throws IOException 读入Xxx类型的数据
注意:
在数据输入输出流的操作过程中,必须按照写入顺序读取,否则由于读取规则的不同,会造成乱码。
代码实现:
package cn.itcast;import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException;public class Demo {public static void main(String[] args) throws IOException {// FileWriter fw = new FileWriter("a.txt"); // fw.write("10"); // fw.close();int a = 983;DataOutputStream dos = new DataOutputStream(new FileOutputStream("a.txt"));dos.writeInt(a);dos.writeBoolean(true);dos.writeChar('a');dos.writeDouble(365);dos.writeUTF("i love java 中国");dos.close();DataInputStream dis = new DataInputStream(new FileInputStream("a.txt"));System.out.println(dis.readInt());System.out.println(dis.readBoolean());System.out.println(dis.readChar());System.out.println(dis.readDouble());System.out.println(dis.readUTF());dis.close();}}
四:内存操作流
不需要调用底层资源的IO流
ByteArrayOutputStream:字节数组输出流 即将数据写到数组中
ByteArrayInputStream:字节数组输入流 即从数组中读取
CharArrayReader:从数组中读去字符
CharArrayWriter:将字符写到数组中
StringWriter:将字符写到字符串中
StringReader:从字符串中读取数据
注意:
有些IO操作流流关闭无效,不会产生IO异常。如ByteArray操作流与String操作流
代码实现:
package cn.itcast;import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Arrays;public class Demo2 {public static void main(String[] args) {/** CharArrayReader:从数组中读去字符* CharArrayWriter:将字符写到数组中* StringWriter:将字符写到字符串中* StringReader:从字符串中读取数据*///创建IO流对象ByteArrayOutputStream baos = new ByteArrayOutputStream();//向缓冲区中写出3个字节baos.write('a');baos.write('b');baos.write('c');//返回缓冲区中的字节数组byte[] byteArray = baos.toByteArray();//使用数组工具类打印字节数组内容System.out.println(Arrays.toString(byteArray));//创建IO流对象,指定一个字节数组为数据源ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);//读取数组中的每一个字节int b;while((b=bais.read())!=-1) {System.out.println((char)b);}}}
五:打印流
专门用来输出的IO流
特点:
专注于输出,不关心数据输入。
可以打印任意类型。
PrintStream :字节打印流
PrintWriter :字符打印流
可以作为普通的输出流。
public void print(char c)
public PrintWriter printf(String format, Object... args)
public void println()
printf与println方法支持自动刷新
代码实现:
package cn.itcast;import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter;public class Demo3 {public static void main(String[] args) throws IOException {PrintWriter pw = new PrintWriter(new FileOutputStream("b.txt"),true);pw.println(200.0);pw.println(false);pw.print(100.0);pw.print(true);pw.println("i love java");pw.printf("我是前边的参数%d%d%.2f", 10,20,10.1); // pw.flush();// pw.close();}}
六:随机访问流
RandomAccessFile:对文件进行随机访问
特点:
同时支持读与写。
需要指定模式。使用“rw”模式。
随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组,即文件是由字节字节组成的,随机访问流将整个文件看做一个byte数组了;
存在指向该隐含数组的光标或索引,称为文件指针;
该指针可以设置或者获取;
设置指针:public void seek(long pos) throws IOException
获取指针:public long getFilePointer() throws IOException
构造方法:
public RandomAccessFile(File file, String mode) throws FileNotFoundException 需要配合读写模式
EOFException:相当于数组角标越界,即索引的访问异常
代码实现:
package cn.itcast;import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile;public class Demo4 {public static void main(String[] args) throws IOException {myWrite();myRead();}public static void myWrite() throws IOException {RandomAccessFile raf = new RandomAccessFile("c.txt", "rw");System.out.println(raf.getFilePointer());raf.writeInt(998);System.out.println(raf.getFilePointer());raf.writeDouble(10.1);System.out.println(raf.getFilePointer());raf.writeUTF("abc中");System.out.println(raf.getFilePointer());raf.close();}public static void myRead() throws IOException {RandomAccessFile raf = new RandomAccessFile("c.txt", "rw");System.out.println(raf.readInt());raf.seek(8);System.out.println(raf.readDouble());System.out.println(raf.readUTF());raf.close();} }
七:对象序列化流
ObjectOutputStream:序列化流
public final void writeObject(Object obj) throws IOException
ObjectInputStream:反序列化流
public final Object readObject() throws IOException, ClassNotFoundException
被序列化的对象必须可序列化,即实现序列化接口作为可序列化的标记。
Serializable:序列化接口
无方法,仅作为可序列化标记使用
写出与读入时,序列化ID必须相同
代码实现:
package cn.itcast;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream;public class Demo5 {public static void main(String[] args) throws IOException, ClassNotFoundException {// ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d.txt")); // // Person p = new Person("唐嫣",26); // oos.writeObject(p); // // oos.close();ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d.txt"));Object readObject = ois.readObject();Person p2 = (Person)readObject;System.out.println(p2.getName());System.out.println(p2.getAge());System.out.println(p2);ois.close();}}
八:Properties
该类是Hashtable的子类。用于存储属性键值对,通常作为配置文件来使用。
特点:
键值对均为字符串
可以直接操作IO流
Properties没有泛型,但是一般情况下,该集合中的键与值均为字符串。
代码实现:
package cn.itcast;import java.util.Properties; import java.util.Set;public class Demo6 {public static void main(String[] args) {//创建集合对象Properties p = new Properties();//创建元素对象//将元素放到集合中p.put("呼保义", new Person("宋江",28));p.put("玉麒麟", new Person("卢俊义",32));p.put("九纹龙", new Person("史进",24));//迭代集合Set<Object> keySet = p.keySet();for (Object key : keySet) {Object value = p.get(key);System.out.println(key+":"+value);}}}
Properties特有方法:
Properties一般作为属性集。里边存储的都为字符串。
public Object setProperty(String key,String value) 为某个属性赋值,即添加元素
public String getProperty(String key) 通过键获取值
public String getProperty(String key, String defaultValue)用指定的键在属性列表中搜索属性。如果没有,就返回默认值
代码实现:
package cn.itcast;import java.util.Properties;public class Demo7 {public static void main(String[] args) {Properties p = new Properties();p.setProperty("智多星", "吴用");p.setProperty("入云龙", "公孙胜");p.setProperty("大刀", "关胜");System.out.println(p.getProperty("智多星"));System.out.println(p.getProperty("大刀"));System.out.println(p.getProperty("豹子头"));System.out.println(p.getProperty("霹雳火"));System.out.println(p.getProperty("霹雳火","梁山好汉"));} }
Properties与IO相关的方法:
public void list(PrintStream out) 将属性列表输出到指定的输出流。通常用于调试。
public void store(OutputStream out, String comments) throws IOException 将属性列表输出到指定的输出流。
public void load(InputStream inStream)throws IOException 从输入流中读取属性列表(键和元素对)。
代码实现:
package cn.itcast;import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Properties;public class Demo8 {public static void main(String[] args) throws IOException {Properties p = new Properties();p.setProperty("是否隐身", "在线");p.setProperty("在线状态", "忙碌");p.setProperty("是否记住密码", "否");// PrintWriter pw = new PrintWriter("e.txt"); // p.list(pw); // pw.close();// FileOutputStream fos = new FileOutputStream("e.txt"); // p.store(fos, "hello"); // fos.close();// FileWriter fw = new FileWriter("e.properties"); // p.store(fw, "hello"); // fw.close();Properties p2 = new Properties();FileReader fr = new FileReader("e.properties");p2.load(fr);fr.close();System.out.println(p);}}
完成需求:复制多级文件夹
代码实现:
package cn.itcast;import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {File srcDIR = new File("a");File destDIR = new File("b");method(srcDIR,destDIR);}//声明函数定义public static void method(File srcDIR,File destDIR) throws IOException {//获取源文件夹下的所有文件对象File[] listFiles = srcDIR.listFiles();//遍历数组,依次获取每一个文件对象for (File fileorDIR : listFiles) {//判断是否为文件if(fileorDIR.isFile()) {File oldFile = fileorDIR;File newFile = new File(destDIR,oldFile.getName()); //新文件所在目录即目标目录,文件名称与老文件名称相同//复制文件//创建流对象BufferedInputStream bis = new BufferedInputStream(new FileInputStream(oldFile));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));//读写int b;while((b=bis.read())!=-1) {bos.write(b);}//关闭bos.close();bis.close();} else { //文件对象为文件夹File oldDIR = fileorDIR;File newDIR = new File(destDIR,oldDIR.getName()); //新文件夹所在目录即目标目录,文件夹名称与老文件夹名称相同//复制文件夹//创建文件夹newDIR.mkdir();//递归调用method完成文件夹复制method(oldDIR,newDIR);}}} }
黑马程序员_JAVA之IO流(其他IO流)相关推荐
- 黑马程序员_java高级篇网络编程TCP实战Day8(上)
---------------------ASP.Net+Android+IOS开发.Net培训.期待与您交流! ----------- 黑马程序员_java高级篇网络编程TCP实战Day8(上) ( ...
- 黑马程序员_java自学学习笔记(八)----网络编程
黑马程序员_java自学学习笔记(八)----网络编程 android培训. java培训.期待与您交流! 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无 ...
- 黑马程序员_JAVA之IO流的(转换流,数据输入输出流等)
------- android培训.java培训.期待与您交流!---------- IO流: 笔记内容:转换流,字节输入输出流,数据输入输出流,内存操作流,随机访问流 打印流,对象序列化流,Prop ...
- 黑马程序员_JAVA相关基础知识
------- android培训.java培训.期待与您交流! -------- JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便 ...
- 黑马程序员_Java解析网络数据流的三种特殊方法
Java解析网络数据流的三种特殊方法 Java作为最开放的语言,已越来越受到网络程序员的青睐.但这一青睐族有着同样的经历--曾经都为网络上通信的Java数据格式而烦恼. 笔者也不例外,曾经为此而查阅了 ...
- 黑马程序员_Java基础Day05_面向对象之封装(Done)
------- android培训.java培训.期待与您交流! ---------- Day05开始接触到了Java核心部分--"面向对象". 面向对象是一种思考思想,是相对于早 ...
- 黑马程序员_java异常处理机制
java异常处理机制 1:什么是异常? 异常(Exception)也叫例外.在Java编程语言中,异常就是程序在运行过程中由于硬件设备问题.软件设计错误.缺陷等导致的程序错误.在软件开发过程中,很多情 ...
- 黑马程序员_Java高新技术--代理
一.生活中的代理更多的用于黑客上面: 武汉人从武汉的代理商手中买联想电脑和直接跑到北京传智播客旁边来找联想总部买电脑,你觉得最终的主体业务目标有什么区别吗?基本上一样吧,都解决了核心问题,但是,一点区 ...
- 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式
GUI(Graphical User Interface)(图形用户接口):用图形的方式,来 显示计算机操作的界面,这样更方便更直观 CLI(Conmand line User Interface)( ...
最新文章
- Tomcat配置Jconsole , JvisualVm 监控配置
- Android: 启动另外的APP及传递参数(转)
- 计算机视觉与深度学习 | 粒子群算法与遗传算法(GA)及与蚁群算法(ACO)比较
- Struts2 ognl表达式
- Angular ctorParameters,decorator等元数据,包含在ActivatedRouteSnapshot数据结构里
- python如何输入空行_在python中,如何在接受用户输入时跳过空行?
- 密码学哈希函数_哈希函数在密码学中的应用
- 汽车行业持续亏损?奥迪:不存在的
- js日期操作,某天的N天后,一个月后的日期
- python元组_Python元组
- 米莱迪机器人加物理攻击_自拍、航拍、运动拍“ALL IN ONE”,臻迪PowerEgg X开启全新未来...
- 激光雷达+imu_激光雷达——定位
- python如何表示正整数_python中正整数
- 复选框不可编辑_你不可错过的Word操作文本小技巧 | 厉害了Word姐15
- 教育网看高清世界杯方法
- c# winform 解决PictureBox 无法打印全部图片的问题
- mysql截取两个括弧中间的字符_mysql 截取指定的两个字符串之间的内容
- Mybatis ResultType处理返回类型
- c语言int型变量写入char数组的方法
- spring cloud eureka无法加载样式wro.css和脚本wro.js