“好程序员笔记”——IO操作
2015-06-16 14:33
666 查看
android培训——我的java笔记,期待与您交流!
文件搜索操作
文件复制操作
缓冲流打印流
缓冲流
打印流
对象序列化
装饰者模式
常见的编码
ISO8859-1
GBKGBK2312
UTF-8
乱码
NIO
ByteBuffer
这次用递归来搜索~
由于并不知道要复制的文件类型所以使用字节流。
主程序
java的缓冲流使用的是一种叫做装饰着模式的设计方法,简单来说就是对流进行装饰使其可以讲数据缓冲起来然后一起写入或读取,这样就比一般的流更加高效。
下面是几个比较重要的缓冲流
一般的字节流想要输出字符,就需要将字符串转化为字节,而打印流就可以直接输出各种类型的数据,构造方法中接受输出流
这样就创建了一个打印流,作为打印流当然也可以显式定义编码
其中的print方法可以输出各种类型的数据,方便输出。
所以讲对象保存到文件上的操作叫序列化,那么从文件将对象提取出来就是反序列化。
ObjectOutputStream可以实现序列化,ObjectInputTream实现反序列化,被序列化的对象必须实现java.io.Serializable接口。
这个接口里面什么内容也没有,是一个标记接口,凡是实现这个接口的类都可以序列化。
如果一个对象的属性不用被序列化,可以使用transient 关键字
装饰者模式有什么好处呢,或者说什么情况下可以用装饰者模式呢,查看java的IO就可以大概知道一些,子类功能繁多,如果每一种直接继承自IO,那之前的什么输入流,输出流,字节输入流,字符输入流,文件输入流,文件输出流balabala~~,子类太多就会很用臃肿,这个时候使用装饰者模式是很好的选择。
装饰者模式的意图:动态地给对象添加一些额外的职责。而且比生成子类更灵活。
其实作者并不懂--!上面都是瞎掰的
那么造成乱码的根本原因就是:
1,程序使用的编码与本机的编码不统一
2,网络服务中,客户端与服务端编码不统一
文件搜索操作
文件复制操作
缓冲流打印流
缓冲流
打印流
对象序列化
装饰者模式
常见的编码
ISO8859-1
GBKGBK2312
UTF-8
乱码
NIO
ByteBuffer
文件搜索操作
怎么用java来搜索想要找的文件呢?这次用递归来搜索~
public static void findFile(File target, String ext){ //如果目标文件不为空 if(target != null){ //判断目标文件是不是文件夹 if(target.isDirectory()){ //如果是把其下所有的文件放到一个文件集合里 File[] files = target.listFiles(); if(files != null){ //遍历文件夹下所有文件 for(File file: files){ //如果file还是个文件夹,就会再次运行到这里…… findFile(file,ext); } } //如果不是文件夹了,就会来到这里 }else{ //得到target的绝对目录 String path = target.getAbsolutePath(); //判断是否是ext字符串结尾 if(path.endsWith(ext)) System.out.println(path); } } }
文件复制操作
对于文件复制首先写了一个方法方法名 | 返回值 | 参数 |
---|---|---|
copyFile | void | File target 要复制的文件,String dest 复制路径 |
public static void copyFile(File target, String dest){ String fileName = target.getName(); File destFile = new File(dest + fileName); System.out.println(destFile.getName()); InputStream in = null; OutputStream out = null; try { in = new FileInputStream(target); out = new FileOutputStream(destFile); byte[] bytes = new byte[1024]; int len = -1; while((len = in.read(bytes)) !=-1){ out.write(bytes, 0, len); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { out.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } } }
由于并不知道要复制的文件类型所以使用字节流。
主程序
public class CopyFileDemo { public static void main(String[] args) { File target = new File("E:/something/picture/1.jpg"); String dest = "E:/something/pic/"; copyFile(target, dest); }
缓冲流,打印流
缓冲流
频繁的读写操作太繁琐,所以使用缓冲流。java的缓冲流使用的是一种叫做装饰着模式的设计方法,简单来说就是对流进行装饰使其可以讲数据缓冲起来然后一起写入或读取,这样就比一般的流更加高效。
下面是几个比较重要的缓冲流
名称 | 作用 |
---|---|
BufferedInputStream | 字节输入缓冲流 |
BufferedOutputStream | 字节数出缓冲流 |
BufferedReader | 字符输入缓冲流 |
BufferedWriter | 字符输出缓冲流 |
打印流
那打印流又是做什么用的呢,就是用来打印的……一般的字节流想要输出字符,就需要将字符串转化为字节,而打印流就可以直接输出各种类型的数据,构造方法中接受输出流
PrintStream(OutputStream out)
这样就创建了一个打印流,作为打印流当然也可以显式定义编码
PrintStream(OutputStream out, boolean autoFlush, String encoding)
其中的print方法可以输出各种类型的数据,方便输出。
对象序列化
对象序列化就是指将一个对象转化为二进制的byte流。所以讲对象保存到文件上的操作叫序列化,那么从文件将对象提取出来就是反序列化。
ObjectOutputStream可以实现序列化,ObjectInputTream实现反序列化,被序列化的对象必须实现java.io.Serializable接口。
这个接口里面什么内容也没有,是一个标记接口,凡是实现这个接口的类都可以序列化。
如果一个对象的属性不用被序列化,可以使用transient 关键字
装饰者模式
java的io本身就是一个很好的装饰者模式的例子,这里也随便写写。装饰者模式有什么好处呢,或者说什么情况下可以用装饰者模式呢,查看java的IO就可以大概知道一些,子类功能繁多,如果每一种直接继承自IO,那之前的什么输入流,输出流,字节输入流,字符输入流,文件输入流,文件输出流balabala~~,子类太多就会很用臃肿,这个时候使用装饰者模式是很好的选择。
装饰者模式的意图:动态地给对象添加一些额外的职责。而且比生成子类更灵活。
其实作者并不懂--!上面都是瞎掰的
常见的编码
常见的编码有下面这几种ISO8859-1
单字节编码,也就是说字符范围最多0-255,主要应用在英文中。GBK/GBK2312
中文的国际编码,专门用来表示汉字,双字节编码,也就是说一个汉字两个字节。UTF-8
一中长度可变的编码,每个字符长度1-6个字节不等,可以用来表示所有语言字符乱码
说完编码,肯定会带来乱码的烦恼那么造成乱码的根本原因就是:
1,程序使用的编码与本机的编码不统一
2,网络服务中,客户端与服务端编码不统一
NIO
新学一个New IO,貌似能提高效率。有优点就有缺点,NewIO以块的方式来处理IO,相比流来说更加复杂。ByteBuffer
返回值 | 方法名 |
---|---|
static ByteBuffer | allocate(int capacity) 分配一个新的字节缓冲区 |
abstract ByteBuffer | put(byte b) 可以添加内容 |
重要参数 | 含义 |
---|---|
position | 位置 |
limit | 极限位置 |
capcacity | 容量 |
相关文章推荐
- 开发人员、程序员与计算机科学家三者之间的区别
- 程序员必备,程序员四大忌
- 程序员们,做好你手里的俩份试卷
- 程序员必备的10大健康装备! 我们要工作更要健康!
- 一篇关于程序员性格的文章第1/3页
- 8种类型极品程序员,不知你属于哪一种?
- 程序员编程从初级到中级的10个秘诀
- 做一个优秀程序员应该知道的15件事
- 程序员开发项目是选择效率还是质量呢?
- 程序员的八种境界,你在哪一境?
- 五个PHP程序员工具
- PHP 程序员应该使用的10个组件
- 程序员学英语的一个方法
- 腾讯QQ php程序员面试题目整理
- 程序员必看2008编程语言走势解盘
- PHP程序员编程注意事项
- 一个合格的程序员应该读过哪些书(偏java)
- 成为好程序员必须避免的5个坏习惯
- 让程序员都费解的10大编程语言特性
- 5个Linux平台程序员最爱的开发工具汇总