黑马程序员——JAVA基础——IO流
2015-11-27 11:36
549 查看
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
一、IO流:
1、概述:
IO用于在设备间进行数据传输的操作2、分类:
A:流向:输入流 读取数据
输出流 写出数据
B:数据类型:
字节流:
字节输入流
字节输出流
字符流:
字符输入流
字符输出流
图解:
注意:
a:如果没有明确说明按照什么分,默认按照数据类型分。b:除非文件用windows自带的记事本打开能够读懂,才采用字符流,否 则建议使用字节流。
3、FileOutputStream写出数据
A:操作步骤a:创建字节输出流对象
b:调用write()方法
c:释放资源
B:代码体现:
FileOutputStream fos = new FileOutputStream("fos.txt");
fos.write("hello".getBytes());
fos.close();
C:要注意的问题?
a:创建字节输出流对象做了几件事情?
b:为什么要close()?
c:如何实现数据的换行?
d:如何实现数据的追加写入?
Eg:
<span style="font-family:Arial Black;">package cn.itcast_02; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; public class OutputStreamWriterDemo { public static void main(String[] args) throws IOException { // 创建对象 // OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream( // "osw.txt")); // 默认GBK // OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream( // "osw.txt"), "GBK"); // 指定GBK OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream( "osw.txt"), "UTF-8"); // 指定UTF-8 // 写数据 osw.write("中国"); // 释放资源 osw.close(); } }</span>
4、FileInputStream读取数据
A:操作步骤a:创建字节输入流对象
b:调用read()方法
c:释放资源
B:代码体现:
FileInputStream fis = new FileInputStream("fos.txt");
//方式1
int by = 0;
while((by=fis.read())!=-1) {
System.out.print((char)by);
}
//方式2
byte[] bys = new byte[1024];
int len = 0;
while((len=fis.read(bys))!=-1) {
System.out.print(new String(bys,0,len));
}
fis.close();
Eg:
<span style="font-family:Arial Black;">package cn.itcast_01; import java.io.FileInputStream; import java.io.IOException; public class FileInputStreamDemo { public static void main(String[] args) throws IOException { // 创建字节输入流对象 FileInputStream fis = new FileInputStream("a.txt"); // 读取数据 // int by = 0; // while ((by = fis.read()) != -1) { // System.out.print((char) by); // } byte[] bys = new byte[1024]; int len = 0; while ((len = fis.read(bys)) != -1) { System.out.print(new String(bys, 0, len)); } // 释放资源 fis.close(); } } </span>
二、字节流
1、概述:
字节流和字符流的基本操作是相同的,但字节流还可以操作其他媒体文件。由于媒体文件数据中都是以字节存储的,所以,字节流对象可直接对媒体文件的数据写入到文件中,而可以不用再进行刷流动作。
读写字节流:InputStream 输入流(读)
OutputStream 输出流(写)
2、为何不用进行刷流动作:
因为字节流操作的是字节,即数据的最小单位,不需要像字符流一样要进行转换为字节。所以可直接将字节数据写入到指定文件中。3、字节缓冲区流
A:BufferedOutputStreamB:BufferedInputStream
三、字符流
1、概述:
字节流操作中文数据不是特别的方便,所以就出现了转换流。转换流的作用就是把字节流转换字符流来使用。
2、转换流其实是一个字符流
字符流 = 字节流 + 编码表3、编码表
A:就是由字符和对应的数值组成的一张表B:常见的编码表
ASCII :最高位为符号位,其余位数值为
Eg: ‘a’ 97
‘A’ 65
‘0’ 48
ISO-8859-1:拉丁码表 8为表示一个数据
GB2312:中国的中文编码表;
GBK:中国的中文编码表升级,融合了更多的中文文字符号;
GB18030:GBK的取代版本
UTF-8:最多用三个字节来表示一个字符;
Unicode:国际标准码,融合了多种文字;(所有文字都用两个字节来表示,java 语言就是Unicode)
C:字符串中的编码问题
编码:
String -- byte[]
解码:
byte[] -- String
4、IO流中的编码问题
A:OutputStreamWriterOutputStreamWriter(OutputStream os):默认编码,GBK
OutputStreamWriter(OutputStream os,String charsetName):指定编码。
B:InputStreamReader
InputStreamReader(InputStream is):默认编码,GBK
InputStreamReader(InputStream is,String charsetName):指定编码
C:编码问题其实很简单
编码只要一致即可
5、字符缓冲区流
A:BufferedReader:readLine()方法可以读取一行字符(不包含换行符号),读到最后不是-1而是returnEg:
<span style="font-family:Arial Black;">package cn.itcast_05; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class BufferedReaderDemo { public static void main(String[] args) throws IOException { // 创建字符缓冲输入流对象 BufferedReader br = new BufferedReader(new FileReader("bw.txt")); // 方式1 // int ch = 0; // while ((ch = br.read()) != -1) { // System.out.print((char) ch); // } // 方式2 char[] chs = new char[1024]; int len = 0; while ((len = br.read(chs)) != -1) { System.out.print(new String(chs, 0, len)); } // 释放资源 br.close(); } }</span>
B:BufferedWriter:newLine()可以读出一个跨平台的换行符号”\r\n”
Eg:
<span style="font-family:Arial Black;">package cn.itcast_05; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; /* * 字符流为了高效读写,也提供了对应的字符缓冲流。 * BufferedWriter:字符缓冲输出流 * BufferedReader:字符缓冲输入流 * * BufferedWriter:字符缓冲输出流 * 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 * 可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。 */ public class BufferedWriterDemo { public static void main(String[] args) throws IOException { // BufferedWriter(Writer out) // BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( // new FileOutputStream("bw.txt"))); BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt")); bw.write("hello"); bw.write("world"); bw.write("java"); bw.flush(); bw.close(); } } </span>
四、总结:
IO流|--字节流
|--字节输入流
InputStream
int read():一次读取一个字节
int read(byte[] bys):一次读取一个字节数组
|--FileInputStream
|--BufferedInputStream
|--字节输出流
OutputStream
void write(int by):一次写一个字节
void write(byte[] bys,int index,int len):一次写一个字节数组的一部分
|--FileOutputStream
|--BufferedOutputStream
|--字符流
|--字符输入流
Reader
int read():一次读取一个字符
int read(char[] chs):一次读取一个字符数组
|--InputStreamReader
|--FileReader
|--BufferedReader
String readLine():一次读取一个字符串
|--字符输出流
Writer
void write(int ch):一次写一个字符
void write(char[] chs,int index,int len):一次写一个字符数组的一部分
|--OutputStreamWriter
|--FileWriter
|--BufferedWriter
void newLine():写一个换行符
void write(String line):一次写一个字符串
图解:
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
相关文章推荐
- Java集合常见面试题集锦
- 青春如画,奋斗似笔—兄弟连IT教育
- 抓住机会!新一轮名企校招启动
- 黑马程序员—JAVA基础——集合
- 大牛的面试趣事
- 黑马程序员—Java基础—面向对象
- 程序员的建议
- 在程序员的眼里,用户是这样使用他们开发的软件的
- <笔试><面试>编写一个排序函数,实现,既可以排序整形数组,又可以排序字符串。
- 黑马程序员-JAVA基础-反射
- 培训机构毕业的程序员被歧视的背后逻辑
- 学会运用合适的方法让码农男朋友放下手中的工作
- 摘自《程序员》
- 黑马程序员—JAVA基础—String类、StringBuffer类
- 黑马程序员——Java笔记——基本数据类型包装类注意
- 【面试】Fragment嵌套Fragment的bug
- 黑马程序员 — JAVA基础 — 内部类、异常
- 黑马程序员——Java笔记——StringBuffer类常用方法
- 黑马程序员—JAVA基础—多态、抽象类、接口、修饰符
- 黑马程序员——Java笔记——正则表达式笔记