----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
io概述
字符流
用来处理字符的基类
FileWriter
字符文件输入流。
文件的创建写入刷新关闭:
FileWriter fw = new FileWriter("demo.txt");
fw.write("abcde");
fw.flush();
fw.close();
文件创建后如果有同名文件会覆盖,关闭流之前自动刷新一次。
io异常的处理
io操作都必须进行io异常的处理
io异常处理示范:
FileWriter fw = null;//在此初始化fw变量,作用于整个函数。
try
{
fw = new FileWriter("C:\\demo.txt");//设置路径c盘下
fw.write("abcdefg");
}
catch (IOException e)
{
System.out.println("catch:"+e.toString());
}
finally
{
try
{
if(fw!=null)//初始化成功才执行,增加程序健壮性。
fw.close();//关闭流也是io操作,也要进行io异常处理
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
文件续写:
//传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。
FileWriter fw = new FileWriter("demo.txt",true);
fw.write("nihao\r\nxiexie");
fw.close();
换行:windows:\r\n
linux:\n
FileReader
字符文件读取流
FileReader fr = new FileReader("demo.txt");
调用读取流对象的read方法。
int read():返回字符的ASC码表值,如果已到达流的末尾,则返回 -1一次读一个字符。连续调用会返回字符文件的下一个字符。
int read(char[] buf):传入参数,作为缓冲区的目标数组。返回读取的字符数。
字符文件读取的两种方式:
一
while(true)
{
int ch = fr.read();
if(ch==-1)
break;
System.out.println("ch="+(char)ch);
}
二
char[] buf = new char[1024];
int num = 0;
while((num=fr.read(buf))!=-1)
{
System.out.print(new String(buf,0,num));
}
字符流的缓冲区
缓冲区目的:为了提高数据读写的效率
使用缓冲区存入字符换行刷新:
FileWriter fw = new FileWriter("buf.txt");
BufferedWriter bufw = new BufferedWriter(fw);
bufw.write("abcd"+x);
bufw.newLine();
bufw.flush();
bufw.close();
使用缓冲区整行读取字符:
FileReader fr = new FileReader("buf.txt");
BufferedReader bufr = new BufferedReader(fr);
String line = null;
while((line=bufr.readLine())!=null)
{
System.out.print(line);
}
bufr.close();
装饰设计模式:
当想要对已有的对象进行功能增强时,
可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类称为装饰类。
装饰类通常会通过构造方法接收被装饰的对象。
并基于被装饰的对象的功能,提供更强的功能。
字节流
FileInputStream
用于读取诸如图像数据之类的原始字节流。
FileOutputStream
用于写入诸如图像数据之类的原始字节的流。
字节流写入的特有方法;
FileInputStream fis = new FileInputStream("fos.txt");
byte[] buf = new byte[fis.available()];//定义一个刚刚好的缓冲区。不用在循环了。
fis.read(buf);
System.out.println(new String(buf));
fis.close();
以上方法要慎用,容易内存溢出。
字节流的缓冲区
BufferedInputStream
实现缓冲的输入流
BufferedOutputStream
该类实现缓冲的输出流
这里要掌握使用缓冲区对字节文件的复制。
使用缓冲区拷贝图片:
BufferedInputStream fin=new BufferedInputStream(new FileInputStream("c:\\shiqi.JPG"));
BufferedOutputStream fou=new BufferedOutputStream (new FileOutputStream("c:\\shiqi2.JPG"));
int a=0;
while((a=fin.read())!=-1)
{
fou.write(a);
}
fin.close();
fou.close();
键盘录入
InputStream in=System.in;
StringBuilder sb=new StringBuilder();
while(true)
{
int ch=in.read();
if(ch=='\r')
continue;
if(ch=='\n')
{
if("over".equals(sb.toString()))
break;
sop(sb.toString().toUpperCase());
sb.delete(0, sb.length());
}
sb.append((char)ch);
}
转换流:
InputStream in=System.in;
InputStreamReader r=new InputStreamReader(in);
BufferedReader br=new BufferedReader(r);
String s=null;
while((s=br.readLine())!=null)
{
if("over".equals(s))
break;
sop(s);
}
br.close();
io流的操作规律:
File类
1,创建。
boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
boolean mkdir():创建文件夹。
boolean mkdirs():创建多级文件夹。
2,删除。
boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。
void deleteOnExit();在程序退出时删除指定文件。
3,判断。
boolean exists() :文件是否存在.
isFile():
isDirectory();
isHidden();
isAbsolute();
4,获取信息。
getName():
getPath():
getParent():
getAbsolutePath()
long lastModified()
long length()
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------