目录:1、io流概述 2、字符流 3、IO异常处理方式4、IO流-BufferedWriter(缓冲流-写) 5、BufferedReader(字符流读取缓冲区)6、装饰和继承的区别 7、字节流的缓冲区
1、IO流
1,IO流用来处理设备之间的数据传输
2,Java对数据的操作都是通过流的方式
3,Java用于操作流的对象都在IO包中
4,流按操作数据分两种:字节流(通用),字符流(融合了编码表)
5,流按流向分:输入流,输出流
字节流的抽象基类:InputStream,OutputStream
字符流的抽象基类:Readr,Writer
2、字符流:
FileReader
FileWriter
BufferedReader
BufferedWriter
FileWrite
import java.io.*;
class FileWriterDemo {
public static void main(String[] args)throws IOException
{
//第一步:创建一个FileWriter对象。该对象一被初始化,就必须要明确要被操作的文件。
//而且该文件会创建到指定的目录下,如果该目录下已有同名文件,将被覆盖
//其实该步就是在明确数据要存放到目的地
FileWriter fw = new FileWriter("demo.txt");
//第二步:调用write方法,将字符串写入到流中
fw.write("abcd");
//第三步:刷新流对象中的缓冲中的数据。
//将数据刷新到目的地中
fw.flush();
fw.write("haha");
fw.flush();
//第四步,关闭资源,但是关闭之前会刷新一次内部的缓冲中的数据
//将数据刷新到目的地中,和flush的区别:
//flush刷新后可以继续使用close刷新后,会将流关闭
fw.close();
}
}
FileReader
import java.io.FileReader;
import java.io.IOException;
class FileReaderDemo {
public static void main(String[] args)throws IOException
{
//创建一个文件读取流对象,和指定名称的文件相关联
//要保证文件是已经存在的,如果不存在,会发生异常FileNotFoundException
FileReader fr = new FileReader("Demo.txt");
//调用读取流对象的read方法。
//read():一次读一个字符。而且会自动往下读
int ch = 0;
while((ch=fr.read())!=-1) {
System.out.println((char)ch);
}
/*
while(true)
{
int ch = fr.read();
if(ch==-1)
break;
System.out.println((char)ch);
}
*/
fr.close();
}
}
3、IO异常处理方式
import java.io.FileWriter;
import java.io.IOException;
class FileWriteDemo2 {
public static void main(String[] args)
{
FileWriter fw = null;
try
{
//这里需注意的是,写盘符一定要两个\比如:c:\\demo.txt
fw = new FileWriter("demo.txt");
fw.write("abcdddr");
}
catch(IOException e)
{
System.out.println("catch:"+e.toString());
}
finally
{
try//fw.close();也有异常,所以要继续捕获
{
if(fw!=null)//一定要判断不为空
{
fw.close();
}
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
}
4、IO流-BufferedWriter(缓冲流-写)
缓冲区的出现是为了提高流的操作效率而出现的。
所以在创建缓冲区之前,必须要现有流对象。
该缓冲区中提供了一个跨平台的换行符方法
newLine();
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
/**
IO流-BufferedWriter演示
*/
class BufferedWriterDemo {
public static void main(String[] args)throws IOException
{
//创建一个字符流对象buf.txt
FileWriter fw = new FileWriter("buf.txt");
//加入缓冲技术
BufferedWriter bw = new BufferedWriter(fw);
//演示换行newLine()
for(int x=0;x<5;x++)
{
bw.write("abcde"+x);
bw.newLine();
bw.flush();
}
//关闭缓冲区
bw.close();
}
}
5、BufferedReader(字符流读取缓冲区)
该缓冲区中提供了一个一次读一行的方法readLine(),方便对文本数据的获取
当返回null时,表示读到文件末尾.
readLine()方法返回的时候值返回回车符之前的数据内容,并不返回回车符
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
/**
* 演示BufferedReader
*/
class BufferedReaderDemo {
public static void main(String[] args)throws IOException
{
//创建一个读取流对象
FileReader fr = new FileReader("buf.txt");
//创建一个读的流缓冲区对象
BufferedReader br = new BufferedReader(fr);
//演示一行一行读的方法readLine();
String line = null;
while((line = br.readLine())!=null)
{
System.out.println(line);
}
//关闭缓冲区
br.close();
}
}
6、装饰和继承的区别
装饰模式比继承要灵活,避免了继承体系的臃肿。
而且降低了类与类之间的关系。
装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。
所以装饰类和被装饰类通常都是一个体系当中的
字节流:
InputStream
OutputStream
BufferedInputSream
BufferedOutputSream
示例:字节流拷贝文件
class CopyPic {
public static void main(String[] args)throws IOException
{
//拷贝的文件
FileOutputStream fos = null;
//源文件
FileInputStream fis = null;
try
{
fos = new FileOutputStream(d:\\2.jpg);
fis = new FileInputStream(d:\\1.jpg);
byte[] buf = new byte[1024];
int ch = 0;
while((ch=fis.read(buf))!=-1)
{
fos.write(buf,0,ch);
}
}
catch(IOException e)
{
System.out.println("复制失败");
}
finally
{
try
{
if(fis!=null)
fis.close();
}
catch(IOException e)
{
System.out.println("读取关闭失败");
}
try
{
if(fos!=null)
fos.close();
}
catch(IOException e)
{
System.out.println("复制关闭失败");
}
}
}
}
}
7、字节流的缓冲区
class CopyMp3 {
public static void main(String[] args)throws IOException
{
long start = System.currentTimeMillis();
copy_1();
long end = System.currentTimeMillis();
System.out.println((end-start)+"毫秒");
}
//通过字节流的缓冲区完成复制.
public static void copy_1()throws IOException
{
BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("H:\\1.mp3"));
BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("H:\\2.mp3"));
int by = 0;
while((by = bufis.read())!=-1)
{
bufos.write(by);
}
bufos.close();
bufis.close();
}
------- android培训、 java培训、期待与您交流! ----------