黑马程序员——IO流(二)
来源:互联网 发布:淘宝网首页电脑版 编辑:程序博客网 时间:2024/06/15 00:31
------- android培训、java培训、iOS培训、.Net培训期待与您交流! ----------
装饰设计模式:
当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有对象的功能,并提供加强功能,那么自定义的该类称为装饰类
装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能
例如:
class Person{public void chifan(){System.out.println("吃饭");}}class SuperPerson{private Person p;SuperPerson(Person p){this.p=p;}public void superChifan(){System.out.println("开胃酒");p.chifan();System.out.println("甜点");System.out.println("来一根");}}class PersonDemo{public static void main(String[] args) {Person p=new Person();//p.chifan();SuperPerson sp=new SuperPerson(p);sp.superChifan();}}
装饰与继承的区别:
装饰模式比继承要灵活,避免了继承体系臃肿,而且降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能,所以装饰类和被装饰类通常都属于一个体系中的
读取键盘录入:
System.out:对应的是标准输出设备,控制台
System.in:对应的是标准输入设备,键盘
如:通过键盘录入数据,当录入一行数据后,就将该行数据进行打印,如果录入的数据是over,那么停止录入
import java.io.*;class ReadIn1{public static void main(String[] args) throws IOException{InputStream in=System.in;StringBuilder sb=new StringBuilder();while(true){int ch=in.read();if(ch=='\r')continue;if(ch=='\n'){String s=sb.toString();if("over".equals(s))break;System.out.println(s.toUpperCase());//大写sb.delete(0,sb.length());//清空缓冲区}elsesb.append((char)ch);}}}
流操作的基本规律:
通过三个明确来完成。
1:明确源和目的。
源:输入流。InputStream Reader
目的:输出流。OutputStream Writer。
2:操作的数据是否是纯文本。
是:字符流。
不是:字节流。
3:当体系明确后,在明确要使用哪个具体的对象。
通过设备来进行区分:
源设备:内存,硬盘。键盘
目的设备:内存,硬盘,控制台。
File类
用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作
File对象可以作为参数传递给流的构造函数
File类常见方法:
1创建:
boolean createNewFile()
在指定位置创建文件,如果该文件已经存在,则不创建,返回false,和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
boolean mkdir():创建文件夹。
boolean mkdirs():创建多级文件夹。
2删除
boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。
void deleteOnExit();在程序退出时删除指定文件。
3判断
boolean exists() :文件是否存在.
isFile()、isDirectory()、isHidden()、isAbsolute()
4获取信息
getName()、getPath()、getParent()、getAbsolutePath() 、long lastModified() 、long length()
Properties:hashtable的子类。是集合中和IO技术相结合的集合容器。
也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串。
该对象的特点:可以用于键值对形式的配置文件。那么在加载数据时,需要数据有固定格式:键=值。
IO包中的其它类
打印流:PrintWriter和PrintStream,可以直接操作输入流和文件
该流提供了打印方法,可以将各种数据类型的数据都原样打印
字符打印流:PrintWriter
构造函数可以接收的参数类型:
1、file对象。File
2、字符串路径。String
3、字节输出流。OutputStream
4、字符输出流,Writer。
字节打印流:PrintStream
构造函数可以接收的参数类型:
1、file对象。File
2、字符串路径。String
3、字节输出流。OutputStream
import java.io.*;class PrintStreamDemo{public static void main(String[] args) throws IOException{BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//PrintWriter out=new PrintWriter(System.out,true);//System.out为字节输出流,打印在控制台上//true代表自动刷新(有换行标记),没有标记的方法不能刷//把数据存到文件里PrintWriter out=new PrintWriter(new FileWriter("a.txt"),true);//刷新只对流而言String line=null;while((line=bufr.readLine())!=null){if("over".equals(line))break;//out.write(line.toUpperCase());//写在缓冲区里了,没有刷新//out.flush();//没有换行//打印流直接有打印方法println,带换行out.println(line.toUpperCase());//out.flush();}out.close();//最后一次(关闭时)刷新一次bufr.close();}}
序列流:SequenceInputStream,对多个流进行合并
管道流:PipedInputStream和PipedOutputStream,输入输出可以直接进行连接,通过结合线程使用
RandomAccessFile:随机访问文件,自身具备读写的方法
该类不算是IO体系中子类,而是直接继承自Object。但是它是IO包中成员,因为它具备读和写功能。
内部封装了一个数组,而且通过指针对数组的元素进行操作。
可以通过getFilePointer获取指针位置,同时可以通过seek改变指针的位置。
其实完成读写的原理就是内部封装了字节输入流和输出流。
通过构造函数可以看出,该类只能操作文件。而且操作文件还有模式:只读r,,读写rw等。
如果模式为只读 r。不会创建文件。会去读取一个已存在文件,如果该文件不存在,则会出现异常。如果模式rw。操作的文件不存在,会自动创建。如果存则不会覆盖。
操作基本数据类型的:DataInputStream与DataOutputStream
操作字节数组的:
ByteArrayInputStream :在构造的时候,需要接收数据源,而且数据源是一个字节数组。
ByteArrayOutputStream: 在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组,这就是数据目的地。
因为这两个流对象都操作的数组,并没有使用系统资源,所以,不用进行close关闭。
字符编码:
常见的编码表:ASCII、GBK、Unicode、UTF-8
字符流的出现是为了方便操作字符,更重要的是加入了编码转换
通过子类转换流来完成:InputStreamReader、OutputStreamWriter
通常涉及到字符编码转换时,需要用到转换流
转换流的编码应用:
可以将字符以指定编码格式存储、可以对文本数据指定编码格式来解读、指定编码表的动作由构造函数完成
在两个对象进行构造的时候可以加入字符集
编码:字符串变成字节数组 String-->byte[] : str.getBytes(charsetName);
解码:字节数组变成字符串 byte[]-->String : new String(byte[],charsetName);
import java.util.*;class EncodeDemo{public static void main(String[] args) throws Exception{String s="你好";//byte[] b1=s.getBytes();//字符串变成字节数组,编码byte[] b1=s.getBytes("GBK");//GBK默认编码System.out.println(Arrays.toString(b1));//把数组b1变成字符串打印//String s1=new String(b1,"ISO8859-1");String s1=new String(b1,"UTF-8");System.out.println(s1);//对s1进行iso8859-1编码//byte[] b2=s1.getBytes("iso8859-1");//不识别中文byte[] b2=s1.getBytes("UTF-8"); //都识别中文造成的System.out.println(Arrays.toString(b2));String s2=new String(b2,"GBK");System.out.println(s2);}}
- 黑马程序员——IO(二)
- 黑马程序员——io流(二)字节流
- 黑马程序员——IO流(二)
- 黑马程序员——IO(Input Output)流(二)
- 黑马程序员——Java IO流(二)
- 黑马程序员——IO流(二)
- 黑马程序员——IO流(二)
- 黑马程序员——Java之IO流(二)
- 黑马程序员——IO流(二)
- 黑马程序员——IO流(二)
- 黑马程序员——IO流(二)
- 黑马程序员——IO流(二)
- 黑马程序员——Java基础--IO流(二)
- 黑马程序员——Java基础--------IO流(二)
- 黑马程序员——JAVA基础----IO流(二)
- 黑马程序员——(学习日记——IO流2)IO(二)
- 黑马程序员——IO二
- 黑马程序员——IO(二)
- 如何将win8系统安装在U盘里
- RadioButton解决文字和drawableleft和文字一起时不居中
- 串口、RS232、COM口
- Unix网络编程卷一: 从服务器获取时间信息(二)-IPV6
- JavaScript
- 黑马程序员——IO流(二)
- Android入门标准
- 插花艺术之东方式花艺
- 一道微软笔试题
- ADT的Android SDK版本扩展
- Android开发学习笔记之通过反射技术修改listview的快速滑块图像
- Unknown column 's1' in 'field list'
- 相册制作软件--4月精选婚纱相册模板{H1.爱的天空}样片
- 10招教你完全识别IDC骗子