黑马程序员----Java中的IO流学习笔记1
2015-08-23 19:54
417 查看
------- android培训、java培训、期待与您交流! ----------
1 .IO流基本知识点
处理和传输数据是程序很重要的一部分。对于数据的传输,无论从哪个源头到哪个接收端(键盘、硬盘、内存以及网络)往往离不开IO流。Java对IO流的操作都在Java.IO包中。
IO流的分类方法:将外设设备数据读取到内存中:输入流。将内存中的数据写入到外设中:输出流。
按所操作的数据分为两种:字节流与字符流。简单点可以归纳为:字节流+编码=字符流。
字节流抽象基类:InputStream 和OutputStream
字符流抽象基类:Reader和Writer
(四个基本流的子类都以其结尾,如FileReader)
2.FileReader/FileWriter
最基本的字符流,以char[]作为缓冲点
2.高效缓冲流BufferedReader/Writer
通过建立缓冲区,在流的基础上对其功能进行了增强
2.1 LineNumberReader
在缓冲流的基础上LineNumberRead 中定义了setLineNumber与getLineNumber两个方法来设置与获取当前行号
3.字节流
3.1 FileInputStream和FileOutputStream
操作过程与FileWriter和FileReader类似,不过缓冲数组变成了byte[]
4.高效字节流
BufferedInputStream和BufferedOutputStream同样的加入了缓冲数组,不过是用byte[]数组进行缓存,输出流与输入流之间用Int作为连接。
package com.cn.test;
import java.io.*;
import java.util.Date;
/**复制Pic文件
5.不同的输入输出设备
根据不同的使用需求,更改不同的源于输出对象。
例子:从键盘读入一行,转换后输出
package com.cn.test;
import java.io.*;
/**
* 键盘录入,控制台输出
* @author Administrator
*
*/
public class SysIODemo {
public static void main(String[] args) {
BufferedReader br=null;
BufferedWriter bw=null;
try {
br
4000
=new BufferedReader(new InputStreamReader(System.in));//从键盘读入一行的方法
bw=new BufferedWriter(new OutputStreamWriter(System.out));
String line=null;
while((line=br.readLine())!=null){//从输入到输出
bw.write(line.toUpperCase());
bw.newLine();
bw.flush();
}
} catch (Exception e) {
// TODO: handle exception
}finally{
try {
if(br!=null)
br.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}
例子:将异常信息写入文本
package com.cn.test;
import java.io.*;
/**
* 将异常信息写入文本
*/
public class ExcpToTxtDemo {
public static void main(String[] args) {
try {
int [] i=new int[3];
System.out.println(i[3]);//构造一个角标越界异常
} catch (Exception e) {
try {
e.printStackTrace(new PrintStream("exceptiiiiiion.txt") );//将异常信息输出到文本文件
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
}
}
}
例子
package com.cn.test;
import java.io.*;
/**
* 键盘录入写入文件(使用Print打印流)
*/
public class WriteSaveDemo {
public static void main(String[] args) {
System.out.println("输入文字");
BufferedReader br=null;
PrintWriter pw=null;
try{
br=new BufferedReader(new InputStreamReader(System.in));
pw=new PrintWriter(new FileWriter("FromSysIn.txt"),true);//从键盘写入
String line=null;
while((line=br.readLine())!=null){
pw.println(line); //println不用newLine,构造函数中第二个参数设置为true,不用flush
}
}catch(IOException e){
e.printStackTrace();
}finally{
try {
if(br!=null)br.close();
} catch (IOException e2) {
// TODO: handle exception
}
try {
if(pw!=null)br.close();
} catch (IOException e2) {
// TODO: handle exception
}
}
}
}
1 .IO流基本知识点
处理和传输数据是程序很重要的一部分。对于数据的传输,无论从哪个源头到哪个接收端(键盘、硬盘、内存以及网络)往往离不开IO流。Java对IO流的操作都在Java.IO包中。
IO流的分类方法:将外设设备数据读取到内存中:输入流。将内存中的数据写入到外设中:输出流。
按所操作的数据分为两种:字节流与字符流。简单点可以归纳为:字节流+编码=字符流。
字节流抽象基类:InputStream 和OutputStream
字符流抽象基类:Reader和Writer
(四个基本流的子类都以其结尾,如FileReader)
2.FileReader/FileWriter
最基本的字符流,以char[]作为缓冲点
import java.io.FileReader; import java.io.FileWriter; /* * 创建一个文件并在控制台中写出 */ public class FileRW { public static void creatFile(){ FileWriter fw=null;//为了防止最后close时发生的异常,这里先定义fw。 try { fw=new FileWriter("D:\\ttt.txt",true);//创建,后面加的参数true表示如果文件存在就在该文件后面的写入 fw.write("asdfasdf");//写 } catch (Exception e) { e.printStackTrace(); } finally{ try { if(fw!=null){ fw.close();//必须要放到try里面,因为就算是关闭,也有可能发生异常 } } catch (Exception e2) { e2.printStackTrace(); } } } /* * read 的异常处理模板痛writer的 */ public static void readFile(){ FileReader fr=null; try { fr=new FileReader("D:\\ttt.txt"); char [] ch=new char[1024];//一般定义的数组长度为2K int len=0; while((len=fr.read(ch))!=-1){//直到读出来的返回的是-1才不循环 System.out.println(new String(ch,0,len));//字符数组转换成字符串打印 } } catch (Exception e) { e.printStackTrace(); } finally{ try { if(fr!=null){ fr.close(); } } catch (Exception e2) { e2.printStackTrace(); } } } //---------------------------------------- public static void main(String[] args) { creatFile();//创建文件 readFile();//读取文件 } }
2.高效缓冲流BufferedReader/Writer
通过建立缓冲区,在流的基础上对其功能进行了增强
import java.io.*; /* * 缓冲字符流实现文本文件拷贝 * 这个Demo把要复制的文件名提供出去了 */ public class Test1 { public static void copyText(String originName,String copyName)throws IOException{//originName被拷贝的文件名,copyName拷贝后的文件名 BufferedReader br=null;//如果在try内声明,最后finally回收的时候找不到对象,所以在这声明 BufferedWriter bw=null; try { bw=new BufferedWriter(new FileWriter(copyName,true));//buffered的装饰器模式 br=new BufferedReader(new FileReader(originName)); String line=null;// while((line=br.readLine())!=null){//BufferedReader使用装饰器模式,一次读一行 bw.write(line);//写一行 bw.newLine();//换一行 bw.flush(); } } catch (IOException e) { throw new IOException("复制失败"); } finally{ try { if(bw!=null){ bw.close(); } } catch (IOException e) { throw new IOException("关闭失败"); } try { if(br!=null){ br.close(); } } catch (IOException e) { throw new IOException("关闭失败"); } } } public static void main(String[] args) throws IOException { copyText("bbq.txt","bbq_1.txt"); } }
2.1 LineNumberReader
在缓冲流的基础上LineNumberRead 中定义了setLineNumber与getLineNumber两个方法来设置与获取当前行号
3.字节流
3.1 FileInputStream和FileOutputStream
操作过程与FileWriter和FileReader类似,不过缓冲数组变成了byte[]
package com.cn.test; import java.io.*; /** * 拷贝图片文件 */ public class CopyPicDemo { public static void copyPic(String readName,String writeName){ FileInputStream fis=null; FileOutputStream fos=null; try { fis=new FileInputStream(readName); fos=new FileOutputStream(writeName); int len=0;byte[] buf=new byte[1024];//缓冲数组与返回的指示int while((len=fis.read(buf))!=-1){ fos.write(buf,0,len);//每次写入数组的长度OutputStream不用flush } } catch (IOException e) { // TODO: handle exception } finally{//关闭释放资源 try { if(fis!=null){ fis.close(); } } catch (IOException e) { // TODO: handle exception } try { if(fos!=null){ fis.close(); } } catch (IOException e) { // TODO: handle exception } } } public static void main(String[] args) { Long start=System.currentTimeMillis();//测试一下运行的速率 copyPic("1.jpg","2.jpg");//执行函数 Long end=System.currentTimeMillis(); System.out.println(end-start); } }
4.高效字节流
BufferedInputStream和BufferedOutputStream同样的加入了缓冲数组,不过是用byte[]数组进行缓存,输出流与输入流之间用Int作为连接。
package com.cn.test;
import java.io.*;
import java.util.Date;
/**复制Pic文件
*
*/ public class BufferedIOCopyDemo { public static void main(String[] args) { Long start=System.currentTimeMillis();//计算运行时间 copyPic("1.jpg","2.jpg"); Long end=System.currentTimeMillis(); System.out.println(end-start); } public static void copyPic(String readName,String writeName){//提供复制的文件名 BufferedInputStream bis=null; BufferedOutputStream bos=null; try { FileInputStream fis=new FileInputStream(readName); FileOutputStream fos=new FileOutputStream(writeName); bis=new BufferedInputStream(fis); bos=new BufferedOutputStream(fos); int len=0; while((len=bis.read())!=-1){ bos.write(len);//outputStream中不用flush } } catch (IOException e) { // TODO: handle exception } finally{ try { if(bis!=null){ bis.close(); } } catch (IOException e) { // TODO: handle exception } try { if(bos!=null){ bis.close(); } } catch (IOException e) { // TODO: handle exception } } } }
5.不同的输入输出设备
根据不同的使用需求,更改不同的源于输出对象。
例子:从键盘读入一行,转换后输出
package com.cn.test;
import java.io.*;
/**
* 键盘录入,控制台输出
* @author Administrator
*
*/
public class SysIODemo {
public static void main(String[] args) {
BufferedReader br=null;
BufferedWriter bw=null;
try {
br
4000
=new BufferedReader(new InputStreamReader(System.in));//从键盘读入一行的方法
bw=new BufferedWriter(new OutputStreamWriter(System.out));
String line=null;
while((line=br.readLine())!=null){//从输入到输出
bw.write(line.toUpperCase());
bw.newLine();
bw.flush();
}
} catch (Exception e) {
// TODO: handle exception
}finally{
try {
if(br!=null)
br.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}
例子:将异常信息写入文本
package com.cn.test;
import java.io.*;
/**
* 将异常信息写入文本
*/
public class ExcpToTxtDemo {
public static void main(String[] args) {
try {
int [] i=new int[3];
System.out.println(i[3]);//构造一个角标越界异常
} catch (Exception e) {
try {
e.printStackTrace(new PrintStream("exceptiiiiiion.txt") );//将异常信息输出到文本文件
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
}
}
}
例子
package com.cn.test;
import java.io.*;
/**
* 键盘录入写入文件(使用Print打印流)
*/
public class WriteSaveDemo {
public static void main(String[] args) {
System.out.println("输入文字");
BufferedReader br=null;
PrintWriter pw=null;
try{
br=new BufferedReader(new InputStreamReader(System.in));
pw=new PrintWriter(new FileWriter("FromSysIn.txt"),true);//从键盘写入
String line=null;
while((line=br.readLine())!=null){
pw.println(line); //println不用newLine,构造函数中第二个参数设置为true,不用flush
}
}catch(IOException e){
e.printStackTrace();
}finally{
try {
if(br!=null)br.close();
} catch (IOException e2) {
// TODO: handle exception
}
try {
if(pw!=null)br.close();
} catch (IOException e2) {
// TODO: handle exception
}
}
}
}
相关文章推荐
- java IO流文件的读写具体实例
- java IO总结
- 从JavaSE开始到Android开发
- 装饰类设计模式 【不完善版】 IO流
- IO流操作规律 转码
- 重置标准输入输出流 IO流
- 【Java基础】IO流操作
- 2014134027谢天
- 2014134027谢天
- 谢天2014134027课程实验报告
- 2014134027 谢天
- JAVA基础-IO流
- IO(输入输出流) 4000
- Java培训-IO流补充
- JavaSE:Day01-Java概述
- IO流操作规律(一)
- 黑马程序员————————IO流 FileWriter类 和 FileReader类的一些基本用法
- 黑马程序员 JAVASE——异常及异常的处理机制
- 黑马程序员 JAVASE——String
- 黑马程序员 JAVA提高——反射