黑马程序员_IO

来源:互联网 发布:企业网络管理培训 编辑:程序博客网 时间:2024/06/09 17:15


---------- android培训、java培训、java学习型技术博客,期待与您交流!----------

零、代码实现

文件复制

try{bufr = new BufferedReader(new FileReader("BufferedWriter.java"));bufw = new BufferedWriter(new FileWriter("BufferWriter_copy.txt"));for(String line=bufr.readLine();null!=line;line=bufr.readLine()){bufw.write(line);bufw.write("\r\n");//写入windows换行符bufw.flush();//实质写入过程catch(IOException e){throw new RuntimeException("读写失败");finally{try{if(null!=bufr)bufr.close();//关闭流可能会抛出错误catch....try{if(null!=bufw)bufw.close();


默认情况下控制台输入输出是标准设备

InputStream in = System.in;while(true){int ch = in.read();//用Reader的readLine()更方便if(ch=='\r')//换行\r\n的前一段continue;//继续循环if(ch=='\n'){//字符串终结....sb.delete(0,sb.length());sb.append((char)ch);



更改标准输入输出设备

System.setIn(new FileInputStream("PersonDemo.java"));System.setOut(new PrintStream("zz.txt"));BufferedReader bufr= new BufferedReader(new InputStreamReader(System.in));BufferedWriter bufw= new BufferedWriter(new OutputStreamReader(System.out));

一、IO流分类

按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。
  节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader。
  处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。


  常用的节点流
父类  InputStream OutputStream Reader Writer
文件  *FileInputStream FileOutputStrean FileReader FileWriter  文件进行处理的节点流
数组  *ByteArrayInputStream  ByteArrayOutputStream  CharArrayReader  CharArrayWriter对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)
字符串  *无   无  StringReader StringWriter  对字符串进行处理的节点流
管道  *PipedInputStream  PipedOutputStream  PipedReader  PipedWriter  对管道进行处理的节点流

 常用处理流(关闭处理流使用关闭里面的节点流)
父类  InputStream OutputStream Reader Writer
缓冲流  *BufferedImputStrean BufferedOutputStream BufferedReader BufferedWriter ----需要父类作为参数构造,增加缓冲功能,避免频繁读写硬盘,可以初始化缓冲数据的大小,由于带了缓冲功能,所以就写数据的时候需要使用flush方法咯
转换流  *InputStreamReader  OutputStreamWriter-  要inputStream或OutputStream作为参数,实现从字节流到字符流的转换
数据流  *DataInputStream DataOutputStream  -提供将基础数据类型写入到文件中,或者读取出来,为什么要有这个流呢?看这样的分析,如果没有这种流的话,有一个long,本身只占8个字节,如果我要写入到文件,需要转成字符串,然后在转成字符数组,那空间会占用很多,但是有了这种流之后就很方便了,直接将这8个字节写到文件就完了。。是不是既节约了内存空间有让程序写起来更加方便简单了呐。写倒是很简单,但是读取的时候就注意了,根据读取的数据类型,指针会往下移,所以你写的顺序必须要和读的顺序一致才能完成你正确的需求。


按数据分为:字节流和字符流。


二、文件IO

File类

用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作。File对象可以作为参数传递给流的构造函数。

File类常见方法:
1,创建:
boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
boolean mkdir():创建文件夹。只能创建3级以内的目录
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() 文件大小

5.操作文件对象。
.renameTo();可以对文件进行改名,也可以实现对文件的移动。
list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
listRoots()  列出可用的文件系统根


三、注意项

transient关键字--修饰成员变量,序列化时不写入该成员变量
Serializable接口--标记性的接口,不需要实现方法,在序列化之前,首先判断(对象  instanceof Serializable)如果返回true则执行序列化,否者抛出异常,并且里面有一个ID,是用来快速查找某个对象的时候使用的。(编译时使用,指定ID)。
Externalizable接口--外部化接口;他是Serializable接口的子接口,能手动控制序列化的方式
Parcelable接口--Android特有的,效率比Serializable高,需实现writeToParcel。
.flush真正从缓冲流写入到输出流


---------- android培训、java培训、java学习型技术博客,期待与您交流!----------



0 0
原创粉丝点击