黑马程序员——JAVA基础——IO流
来源:互联网 发布:按网络功能层次分 编辑:程序博客网 时间:2024/05/17 03:05
-----------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"); // 指定GBKOutputStreamWriter 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:BufferedOutputStream
B: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:OutputStreamWriter
OutputStreamWriter(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而是return
Eg:
<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);// }// 方式2char[] 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基础---IO
- 黑马程序员——java基础--IO
- 黑马程序员——Java基础---IO
- 黑马程序员 Java基础——IO
- 黑马程序员—Java基础—IO
- 黑马程序员——java基础——IO流
- 黑马程序员——Java基础——IO流
- 黑马程序员——Java基础——IO流
- 黑马程序员——java基础——IO流
- 黑马程序员——Java基础——IO流
- 黑马程序员——JAVA基础——IO流
- 黑马程序员——java基础——IO流
- 黑马程序员——JAVA基础——IO流
- 黑马程序员——Java基础—IO流
- 黑马程序员——Java基础—IO流(File)
- 黑马程序员——Java基础---IO流(字符流)
- 黑马程序员——Java基础---IO流(字节流)
- 黑马程序员——java基础之IO流
- 混合高斯模型(Mixtures of Gaussians)和EM算法
- POJ1276 多重背包DP 生命不息优化不止
- jiffies使用举例
- Linux 用户环境变量丢失故障及解决
- 支持向量机(1)
- 黑马程序员——JAVA基础——IO流
- java.net.BindException: Address already in use: JVM_Bind:8080
- (C++)UrlEncode的标准实现 libcul
- [019]转--C++ operator关键字(重载操作符)
- jQuery/JSON
- Android 中 EventBus 的使用(2):缓存事件
- iOS企业开发者账号申请流程(未完待续)
- 主成分分析(Principal components analysis)-最大方差解释
- 学习笔记