黑马程序员_IO流
来源:互联网 发布:网络销售保健品 编辑:程序博客网 时间:2024/05/14 14:29
IO流
(一)概述
Java吧数据传输序列称为流,分为输入流和输出流,输入和输出都是相对于内存设备的,将外设中的数据读取到内存中称为输入,将内存的数写入到外设中称为输出。
字符流的由来,其实就是字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字。在对这个文字进行操作,简单说:字符流=字节流+编码表。
输入输出值得是内存向目的地输入输出,目的地可以有,文件、网络、压缩包,也可以是键盘、鼠标、内存或者显示器等。
(二)数据流常用类
操作字符流的两个顶层父类:1,Reader 2,Writer
操作字符流的常用子类有Writer 、Reader、FileReader、FileWriter、BufferedReader、BufferedWriter
字节流的两个顶层父类:1,InputStream 2,OutputStream.
操作字节流的常用子类有FileInputStream 、FileOutputStream、BufferedInputStream、BufferedOutputStream
用这些常用流操作可以做文件复制
首先利用字符操作类Filereader filewriter写文本文件复制。
代码:
import java.io.FileReader;import java.io.FileWriter;import java.io.IOException; public class FileCopyDemo {public static void main(String[] args){char[] cbuf=new char[10];//用来接收读取的字符串,每次读取1kFileReader fr=null;FileWriter fw=null;try {fw=new FileWriter("d:\\a.java");//新建一个文件名为a.java的Filewriter实例并创建新文件fr = new FileReader("g:\\a.java");//新建一个文件名为a.java的FileReader实例int len ;while((len= fr.read(cbuf))!=-1){//循环读取所有信息,并存入新文件fw.write(cbuf, 0, len);}System.out.println("复制完成");} catch (IOException e) {// 处理异常System.out.println("没有这个文件");}finally{//关闭两个文件资源if(fr!=null)try {fr.close();} catch (IOException e) {new Throwable("关闭文件异常");}if(fw!=null)try {fw.close();} catch (IOException e) {new Throwable("关闭文件异常");}}}}
利用字符操作类BufferedReader、BufferedWriter写文本文件复制,缓冲区可以提高读写效率
主要展示这两个类的操作方法,这里没写对抛出异常的处理
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException; public class BufferedCopyDemo {public static void main(String[] args) throws IOException{FileReader fd=new FileReader("a.txt");//读取的文件必须要存在否则会报错FileWriter fw=new FileWriter("d:\\a.txt");//要复制的目的文件//把两个文件流放入缓冲区BufferedReader bfd=new BufferedReader(fd);BufferedWriter bfw=new BufferedWriter(fw);String str;while((str=bfd.readLine())!=null){//如果没有读完文件就继续循环bfw.write(str);//把每次循环的值赋给新文件bfw.newLine();bfw.flush();}bfw.close();bfd.close();}}
利用字节流复制文件,可以复制非字符文件,如图片视频音频等二进制文件。这里利用FileInputStream 、FileOutputStream、BufferedInputStream、BufferedOutputStream操作,并比较操作效率。
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException; public class ByteFileCopyDemo { public static void main(String[] args) throws IOException {long l=System.currentTimeMillis();demo1();//调用无缓冲区的方法System.out.println(System.currentTimeMillis()-l);l=System.currentTimeMillis();demo2();//调用缓冲区方法System.out.println(System.currentTimeMillis()-l);//根据输出结果,发现缓冲区明显效率比无缓冲区高。} public static void demo1() throws FileNotFoundException, IOException {//把文件与数据流关联并实例化FileInputStream fis=new FileInputStream("G:\\KuGou\\答案.mp3");FileOutputStream fos=new FileOutputStream("d:a.mp3");byte[] buf=new byte[2048];while (fis.read(buf)!=-1) {fos.write(buf);//把就文件不断写入新文件}fos.close();fis.close();}public static void demo2() throws FileNotFoundException, IOException {//把文件与数据流关联并实例化 FileInputStream fis=new FileInputStream("G:\\KuGou\\答案.mp3");BufferedInputStream bufis=new BufferedInputStream(fis);//实力换两个buffered缓冲区,并把文件流放入缓冲区 FileOutputStream fos=new FileOutputStream("d:a.mp3");BufferedOutputStream bufos=new BufferedOutputStream(fos);//实力换两个buffered缓冲区,并把文件流放入缓冲区 byte[] buf=new byte[2048];while (bufis.read(buf)!=-1) {bufos.write(buf);//旧文件不断写入新文件}bufos.close();bufis.close();} }
从键盘读取数据system.in的基本使用,可以把.system.in 当成一个流进行操作,代码如下
import java.io.IOException;import java.io.InputStreamReader; public class ReadKeyDemo {public static void main(String[] args) throws IOException{InputStreamReader isr=new InputStreamReader(System.in);//把键盘输入流放入reader流读取char[] buf=new char[1024];isr.read(buf);System.out.println(new String(buf));//输出键盘每次输入的内容}}
(三)文件流常用操作
字符流与字节流只是操作文件内容的,那么用什么来操作文件夹和文件呢?
Java中提供了file类
File类的基本使用,递归的读取文件以及子文件内容
用一句话来概括,递归获取内容:如果是文件则输出,如果是目录则当成参数传入自身继续调用自身
import java.io.File;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date; public class FileTreeDemo { public static void main(String[] args) { show("D:\\360安全浏览器下载",0); } public static void show(String path,int lev) {//path为路径,lev为文件夹的深度File f=new File(path);String strtime;//用来存放文件最后一次操作时间的字符Date d=new Date();DateFormat df=new SimpleDateFormat("yyyy-MM-dd hh-mm-ss");//格式化输出时间String[] name=f.list();for (int i = 0; i < name.length; i++) {d.setTime(new File("d:\\a.txt").lastModified());//获取文件最后一次操作时间if(new File(path+"\\"+name[i]).list()==null){System.out.println(strcopy(lev)+"--"+name[i]+"时间:"+df.format(d));//如果是文件则输出当前文件名}else{show(path+"\\"+name[i],++lev);//如果是一个目录那么继续递归}}}public static String strcopy(int i){///格式化输出文件名String str="";for (int j = 0; j < i; j++) {str+=" |";}return str;} }
文件夹的删除基本思路
如果是文件则删除当前文件,如果是目录继续递归,在递归完成之后继续删除当前文件夹,提示回收站找不回,请慎重使用
代码展示
import java.io.File; public class FileTreeDemo { public static void main(String[] args) { del("D:\\a"); } public static void del(String path) {//path为路径,File f=new File(path);String[] name=f.list();for (int i = 0; i < name.length; i++) {if(new File(path+"\\"+name[i]).list()==null){new File(path+"\\"+name[i]).delete();//如果是文件则删除当前文件}else{del(path+"\\"+name[i]);//如果是一个目录那么继续递归new File(path+"\\"+name[i]).delete();//在递归完成之后继续删除当前文件夹}}new File(path).delete();} }
Properties 经常和文件流组成配置文件,代码演示
假设已经存在a.txt{
Key1 =hello
Key2=hahahha
Key3=heheh
Key4=xixixixixixixi
}
import java.io.FileReader;import java.io.IOException;import java.util.Properties; public class FileTreeDemo { public static void main(String[] args) throws IOException { FileReader fr=new FileReader("a.txt");//实例化文件流并关联一个文件 Properties prop=new Properties(); prop.load(fr);//把文件读取到pro for (int i = 0; i < prop.size(); i++) {System.out.println(prop.getProperty("key"+i));//根据键输出,配置文件经常利用到这一点}} }
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- BZOJ 1601 Usaco2008 Oct 灌水 Prim
- 电话吸费赚钱 小投资大回报 手机吸费
- JAVA 多线程 线程间的通讯
- 如何获得COM的Interop交互库C#源代码
- 加值电话代理商机 声讯电话平台 电话转接器
- 黑马程序员_IO流
- [UVA10561] Treblecross && 博弈 SG函数
- hdu 5128 The E-pang Palace (计算几何+暴力枚举)
- 创建刷新物化视图存储过程
- axure自开发
- JAVA 线程间通信 - 生产者与消费者
- 加值电话招商 声讯电话平台 月入过万
- 文本文件行处理,8进制数据替换成16进制
- 揭秘响一声电话吸费 声讯电话平台