------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1.IO流用来处理设备之间的数据传输
流按操作数据分为字节流与字符流
流按流向分为:输入流,输出流
字节流的抽象基类:InputStream,OutputStream
字符流的抽象基类:Reader,Writer
2.FileWrite应用实例
import java.util.*;
import java.io.*;
class test5
{
public static void main(String[] args)
{
//创建一个FileWriter对象,该文件会被创建到指定目录下
FileWriter fw=null;
FileReader fr=null;
try
{
//传递一个true参数,代表不覆盖已经存在的文件,在文件末尾处进行写
fw=new FileWriter("demo.txt",true);
fr=new FileReader("demo.txt");
fw.write("ab\r\ncde");
fw.flush();
//逐个读取
/* int ch=0;
while((ch=fr.read())!=-1)//fr.read(),返回int型数据
{
System.out.println("ch="+(char)ch);
}
*/
//通过字符数组来读取,read(char[])返回的是读到的字符个数。
char a[]=new char [3];
int num=0;
while((num=fr.read(a))!=-1)
{
System.out.println(new String(a,0,num));
}
}
catch (IOException e)
{
System.out.println("cuowu ");
}
finally
{
try {
//关闭的前提是,文件被创建
if(fw!=null)
fw.close();//关闭流资源,并刷新一次
fr.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
}
}
3.字符流的缓冲区
缓冲区的出现提高了对数据的读写效率
对应类:BufferWriter BufferReader
创建缓冲区之前,必须现有流对象。
把需要提高效率的流对象作为参数传递给缓冲区的构造函数即可。
跨平台的换行符,newLine();
BufferReader:字符流读取缓冲区,提供了一次读一行的方法,方便于对文本数据的获取。当返回值为null时,文本结束。
readLine();不返回回车符,其实也是read在一个一个读,到回车符时全部返回
4.MyReader//专门用于读取数据的类
装饰模式比继承要灵活,避免继承体系臃肿,降低了类与类之间的关系。
装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强的功能,都属于同一体系。
5.字节流
InputStream OutputStream//写入
需求:想要操作图片数据,就要用到字节流
字节流基本操作:
import java.io.*;
class test6
{
public static void main(String[] args) throws IOException
{
writeFile();
readFile_1();
readFile_2();
}
public static void writeFile() throws IOException
{
FileOutputStream fos=new FileOutputStream("fos.txt",true);
//字符串变成字节数组
fos.write("abcde".getBytes());
fos.close();
}
public static void readFile_1() throws IOException
{
//定义字节流数组读取
FileInputStream fis=new FileInputStream("fos.txt");
byte[] b=new byte[1024];//定义字节数组,不要写成Byte了。
int num=0;
while((num=fis.read(b))!=-1) //没有读到结束时。
{
System.out.println(new String(b,0,num));
}
fis.close();
}
public static void readFile_2() throws IOException
{
FileInputStream fis=new FileInputStream("fos.txt");
byte[] b=new byte[fis.available()];//定义一个刚好的自己数组,但是如果是视频等需要太大内存,容易内存泄露
int num=fis.read(b);
/* while((num=fis.read(b))!=-1) //没有读到结束时。
{
System.out.println(new String(b,0,num));
}*/
System.out.println(new String(b,0,num));
fis.close();
}
}