黑马程序员——java IO
来源:互联网 发布:iapp免杀软件 编辑:程序博客网 时间:2024/05/01 09:27
---------- android培训、java培训、java学习型技术博客、期待与您交流! ----------
1、IO(Input Output)流
(1)IO流用来处理设备之间的数据传输
(2)Java对数据的操作是通过流的方式l
(3)Java用于操作流的对象都在IO包中l
(4)流按操作数据分为两种:字节流与字符流 。l
(5)流按流向分为:输入流,输出流。
2、IO流常用基类
(1)字节流的抽象基类:
•InputStream ,OutputStream。l
(2)字符流的抽象基类:
•Reader ,Writer。l
注:由这四个类派生出来的子类名称都是 以其父类名作为子类名的后缀。
•如:InputStream的子类FileInputStream。
•如:Reader的子类FileReader。
3、IO程序的书写
(1)导入IO包中的类l
(2)进行IO异常处理
(3)在finally中对流进行关闭
4、字符流FileWriter——创建文件l
(1)创建流对象,建立数据存放文件
•FileWriter fw = new FileWriter(“Test.txt”);l
(2)调用流对象的写入方法,将数据写入流
•fw.write(“text”);l
(3)关闭流资源,并将流中的数据清空到文件中。
•fw.close();
5、字符流FileReader——读取文件
(1)建立一个流对象,将已存在的一个文件加载进 流。
•FileReader fr = new FileReader(“Test.txt”);
(2)创建一个临时存放数据的数组。
•char[] ch = new char[1024];
(3)调用流对象的读取方法将流中的数据读入到数组 中。
•fr.read(ch);
注意:l
(1)定义文件路径时,可以用“/”或者“\\”。l
(2)在创建一个文件时,如果目录下有同名文 件将被覆盖。l
(3)在读取文件时,必须保证该文件已存在, 否则出异常。
6、字符流的缓冲区BufferedReader、BufferedWriter
1、缓冲区的出现提高了对数据的读写效率
2、缓冲区要结合流才可以使用
3、在流的基础上对流的功能进行了增强
BufferedWriter bw = new BufferedWriter(new FileWriter("buf.txt"));
记住,
只要用到缓冲区,就记得刷新flush
关闭缓冲区,就是在关闭缓冲区中的流对象close
输出流缓冲区中提供了一个方法newLine();跨平台的换行
输入流缓冲区中提供了一个方法newLine();读取一行,当到了结尾时,返回null
newLine不包含\r\n或\n,如果到了结尾,就返回null
【缓冲区综合运用】
/**
* 拷贝一个java文件
*/
public class IO_09_Buffered {
public static void main(String[] args) {
BufferedReader bufr = null;
BufferedWriter bufw = null;
try {
//创建输入流缓冲区
bufr = new BufferedReader(new FileReader("A.java"));
//创建输出流缓冲区
bufw = new BufferedWriter(new FileWriter("B.java"));
String line = null;//保存行数据,后面就是循环读取了
while ((line=bufr.readLine())!=null) {
bufw.write(line);
//因为readLine不读取换行符,所以要自己加换行符
bufw.newLine();
bufw.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally{
if(bufw!=null){
try {
bufw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bufr!=null){
try {
bufr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
7、LineNumberReader 类
public class IO_10_LineNumberReader {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("A.java");
LineNumberReader lr = new LineNumberReader(fr);
//不会真正改变行号,只是会改变getLineNumber的行号
lr.setLineNumber(100);
String line = null;
while ((line=lr.readLine())!=null) {
System.out.println(lr.getLineNumber()+":"+line);
}
lr.close();
}
}
8、字节流
字节流操作与字符流相同,但它不仅可以操作字符,还可以操作其他媒体文件。
例如:拷贝图片
FileInputStream
public static void readFile() throws IOException{
FileInputStream fis = new FileInputStream("fos.txt");
byte[] buf = new byte[1024];
//available方法表明了还有几个字节可以读取
System.out.println("还可读几个字符:"+fis.available());
int len = fis.read(buf);
//这里的available返回数是上一个available返回数减去len
System.out.println("还可读几个字符:"+fis.available());
System.out.println(new String(buf,0,len));
fis.close();
}
字节流缓冲区的操作与字符流操作步骤相似
读取键盘录入
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();
//如果等于over,就退出程序
if("over".equals(s))
break;
System.out.println(s.toUpperCase());
//清空StringBuilder
sb.delete(0, sb.length());
}
sb.append((char)ch);
}
}
转换流
InputStreamReader、OutputStreamWriter
转换流的由来
(1)字符流与字节流之间的桥梁
(2)方便了字符流与字节流之间的操作
转换流的应用
字节流中的数据都是字符时,转成字符流操作更高效
流操作规律
1、
源:键盘录入
目的:控制台
2、
源:键盘录入
目的:文件
3、
源:文件
目的:控制台
4、
源:文件
目的:文件
流操作的基本规律:最痛苦的就是流对象太多,不知道该用哪一个。
通过3个明确来完成。(重点)
1、明确源和目的
源:输入流:InputStream、Reader
目的:输出流:OutputStream、Writer
2、操作的数据是否是纯文本
是:字符流
不是:字节流
3、当体系明确后,在明确要使用哪些具体的对象
通过设备来进行区分:
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台
File类
(1)用来将文件或者文件夹封装成对象l
(2)方便对文件与文件夹的属性信息进行操作 。
(3)File对象可以作为参数传递给流的构造函数。
(4)了解File类中的常用方法。
递归
函数自己调用自己。
注意:递归时一定要明确结束条件。l
应用场景:
当某一功能要重复使用时。
IO包中的其他类
RandomAccessFile
•随机访问文件,自身具备读写的方法。
•通过skipBytes(int x),seek(int x)来达到随机访问。
管道流
•PipedInputStream和PipedOutputStream
•输入输出可以直接进行连接,通过结合线程使用。
打印流
•PrintWriter与PrintStream
•可以直接操作输入流和文件。
序列流
•SequenceInputStream
•对多个流进行合并。
操作对象
•ObjectInputStream与ObjectOutputStream
•被操作的对象需要实现Serializable (标记接口);
操作基本数据类型
•DataInputStream与DataOutputStream
操作字节数组
•ByteArrayInputStream与ByteArrayOutputStream
操作字符数组
•CharArrayReader与CharArrayWrite
操作字符串
•StringReader 与StringWriter
字符编码
字符流的出现为了方便操作字符。l
更重要是的加入了编码转换。l
通过子类转换流来完成。
•InputStreamReader
•OutputStreamWriter
在两个对象进行构造的时候可以加入字符集。
常见的编码表
(1)ASCII:美国标准信息交换码。
•用一个字节的7位可以表示。
(2)ISO8859-1:拉丁码表。欧洲码表
•用一个字节的8位表示。
(3)GB2312:中国的中文编码表。
(4)GBK:中国的中文编码表升级,融合了更多的中文文字符号。
(5)Unicode:国际标准码,融合了多种文字。
•所有文字都用两个字节来表示,Java语言使用的就是unicode
(6)UTF-8:最多用三个字节来表示一个字符。
转换流的编码应用
(1)可以将字符以指定编码格式存储。
(2)可以对文本数据指定编码格式来解读。
(3)指定编码表的动作由构造函数完成。
字符编码
(1)编码:字符串à字节数组
(2)解码:字节数组à字符串
个人学习总结
java IO中的流对象很多,但是每一种都有自己的专长,如FileReader专门读取纯文本,FileInputStream可以读取所有的文件等,在运用是,我们只要按照以下来分析,就可以很好地运用io操作。
通过3个明确来完成。(重点)
1、明确源和目的
源:输入流:InputStream、Reader
目的:输出流:OutputStream、Writer
2、操作的数据是否是纯文本
是:字符流
不是:字节流
3、当体系明确后,在明确要使用哪些具体的对象
通过设备来进行区分:
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台
----------android培训、java培训、java学习型技术博客、期待与您交流! ----------
详细请查看:http://edu.csdn.net/heima
- 黑马程序员——Java IO概述
- 黑马程序员——Java IO
- 黑马程序员——Java IO
- 黑马程序员——JAVA(IO 2)
- 黑马程序员——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
- .Net面试知识
- 获取手机信息<uses-permission android:name="android.permission.READ_PHONE_STATE" />
- 《Effective STL》读书笔记一:Item 1(小心选择容器) Item 2(当心容器无关代码的假象)
- cocos2d-x锚点在Sprite与Layer上移动定位不一样的问题。
- Canvas绘图(各种图片的绘制)
- 黑马程序员——java IO
- 使用exe4j 制作java启动程序的 等候界面
- php格式化数字:位数不足前面加0补足
- 通过CCID获得各个段的描述的方法
- linux与用户相关内容及命令
- IE中body的事件范围
- 黑马程序员——java图形界面GUI
- Android的PowerManager和PowerManager.WakeLock
- 黑马程序员——java网络编程