黑马程序员——IO流学习笔记
2015-12-13 14:42
465 查看
-------
android培训、java培训、期待与您交流! ----------
IO流
一、概念
流按操作数据分:字节流,字符流按流向分为:输入流输出流
英文编码表:ASICCI码
汉子编码表:GB2312,扩容后GBK
国际标准码表:UNICODE,优化后变为utf-8;
字符流读取的时候用什么码表可以有我们自己指定,这样处理文字就变得很方便
所以处理文字用字符流方便,处理图片用字节流方便,通用字节流
四个流的基类:InputStream,OutputStream,Reader,Writer
所有的子类都以这四个类作为后缀名
二、字符流Reader.Writer
一般我们用FileWriter文件输出流创建一个文件对象和一个FileWrter对象,该对象一初始化就要明确被操作的文件。
而且该文件被创建到指定的目录下,如果有同名文件,将会被覆盖,这步就是为了明确数据要存放的目的地
File file=new File("demo.txt");
FileWriterfw=new FileWriter(file);
fw就是一个流,把类容写到fw这个流中
fw.write("abcde");
并且把流的数据写到文件中
fw.flush();或者用fw.close();
这些方式都是在使用Windows的资源
三、IO异常的处理
异常的标准处理如下FileWriter fw=null;
try {
//这里有可能产生文件找不到异常,和IO异常
fw = new FileWriter("file.txt");
fw.write("abc");
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
//这里可能报空指针异常和IO异常
if(fw!=null){
fw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
四、文件的续写
在参数中传递true,那么表示文件可以续写,把新内容写到文件中去fw = new FileWriter("file.txt",true);
fw.write("哈哈");
在写入文件中换行的话,由\r\n表示换行
五、文件的读取
FileReaderfr=new FileReader("file.txt");方式一、一次读一个字符
len=fr.read();
方式二、一次读取一个字符数组的字符
char[] c=newchar[4];
int len=0;
while((len=fr.read(c))!=-1){
System.out.println(len);
}
六、文件的拷贝
建立输入流和输出流FileReader fr=new FileReader("file.txt");
FileWriter fw=new FileWriter("copy.txt");
char[] c=newchar[1024];
int len=0;
读取文件
while((len=fr.read(c))!=-1){
fw.write(c,0,len); }
关闭流
fr.close();
fw.close();
七、字符流缓冲区BufferedWriter,BufferedWriter
1、文件写入:FileWriter fw=new FileWriter("copy.txt",true);
BufferedWriter bw=new BufferedWriter(fw);
bw.write("你好jiayou a");
bw.close();关闭缓冲区就是关闭流,所以不用fw.close();
bw.newline();换行,可以跨平台,在windows和linux都是换行
2、文件读取
FileReader fr=new FileReader("file.txt");
BufferedReader buf=new BufferedReader(fr);
String s=null;
文件的读取,readLine一次读取一行,方便对文本数据的获取,如果返回null表示文件读完
while((s=buf.readLine())!=null){
System.out.println(s);
}
八、读取键盘输入
System.out对应的标准输出设备,System.in对应的标准输入设备从键盘读取输入流
InputStreamis=System.in;<
4000
/p>
//定义一个缓冲区
StringBuilder sb=new StringBuilder();
while(true){对读取的字符判断,如果是换行,进行下面的判断
int ch=is.read();
if(ch=='\r')
continue;
if(ch=='\n'){如果是换行符,把缓冲区的变为字符串
String s=sb.toString();
if("over".equals(s)){如果字符串是over,那么程序结束
break;
}else{如果不是over,打印字符串,并且清空缓冲区
System.out.println(s);
sb.delete(0, sb.length());
}
}else{如果不是换行,把字符添加到缓冲区
sb.append((char)ch);
}
}
九、转换流
InputStreamReader操作字节流的字符流对象,是字节流通向字符流的桥梁,可以把字节流转换为字符流outputstreamwriter为把字符转换为字节的类
从键盘读取数据,
InputStreamis=System.in;
把字节流转换为字符流
InputStreamReader isr=new InputStreamReader(is);
把字符流装进缓冲区
BufferedReader bufr=new BufferedReader(isr);
创建一个字节输出流
OutputStream os=System.out;
把字符流转换为字节流输出
OutputStreamWriter osw=new OutputStreamWriter(os);
创建一个字符流缓冲区
BufferedWriter bufw=new BufferedWriter(osw);
String s=null;
while((s=bufr.readLine())!=null){
if("over".equals(s))
break;
bufw.write(s);
bufw.newLine();换行
}
bufw.close();
bufr.close();
键盘输入合为一句
BufferedReader bufr=
new BufferedReader(newInputStreamReader(System.in))
BufferedWriterbufw=
new BufferedWriter
(newOutputStreamWriter(newFileOutputStream("file.txt")))
把键盘的输入写入文件:
OutputStreamos=newFileOutputStream("file.txt");
十.流操作规律
1、明确源和目的源:输入流inputstream,reader
目的:输出流outputstream,writer
2、操作的是否纯文本
是:字符流
不是:字节流
3、当体系明确后,在明确要使用哪个具体的对象
通过设备来进行区分,
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台
十一、指定编码表
转换流可以指定编码表BufferedWriterbufw=
new BufferedWriter
(newOutputStreamWriter
(newFileOutputStream("file.txt"),"utf-8"));在写的时候可以以utf-8的编码来存,读取也一样,对应的
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统