java io (上)

参考链接:http://www.2cto.com/kf/201604/501488.html

一. java IO概念

java中I/O主要是指使用Java进行输入,输出操作.


二.Java IO的体系结构

Java I/O主要包括如下几个层次,包含三个部分

 1.流式部分――IO的主体部分;

 2.非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor等类;

 3.其他类--文件读取部分的与安全相关的类,如:SerializablePermission类,以及与本地操作系统相关的文件系统的类,如:FileSystem类和Win32FileSystem类和WinNTFileSystem类。

 主要的类如下:

\

1. File(文件类):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。

2. InputStream(字节输入流):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。

3. OutputStream(字节输出流):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。

4. Reader(字符输入流):抽象类,基于字符的输入操作。

5. Writer(字符输出流):抽象类,基于字符的输出操作。

6. RandomAccessFile(随机文件操作):一个独立的类,直接继承至Object.它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。


三:非流式部分

3.1 file类

3.1.1 File类有四个构造函数:

File(String pathname) //可以是绝对路径,但如果是相对路径,那么文件在将会在包文件夹下

File(File parent, String child)//如果用这种方式建立文件实例,则parent+child必须是绝对路径

File(String parent, String child)//文件在parent+child的路径下

File(URI uri)

利用构造方法,指定路径名、文件名等来构造File类的对象。

parent指定路径(父目录),可以是File类对象也可以是字符串,如果想文件被成功创建,那么parent的路径字符串和child合起来必须是一个有效的绝对路径。


关于斜杠和反斜杠,只能如下生硬地先记住吧:

\\:右手用两个,比如new File("D:\\abc\\" + "Test.txt");

/:左手用一个。比如new File("D:/abc/" + "Test.txt");(推荐)

/可以用:FILE.separator

,可以用:FILE.pathseparator


3.1.2 创建文件或者文件夹

 一个File类对象既可以表示文件夹也可以表示文件。

(1)new File(String str).createNewFile();//用于创建文件

(2)new File(String str).mkdir();//用于创建文件夹

    new File(Stirng str).mkdirs();//用于创建文件夹

   区别:注意mkdir()方法使用时只能创建底层文件夹,如果路径中父文件夹不存在,则创建失败,即底层文件夹不会产生。而mkdirs()可以创建整个路径中所有的文件夹,mkdir创建失败的原因只有:底层文件夹已存在的情况。


3.1.3 目录与文件操作

 public String[] list();//返回当前路径名表示目录下的文件名。

 public File[] listFiles();//返回当前路径名下的所有文件。与list()方法的不同之处在于一个返回的是字符串,另一个返回的是File类对象。

 public boolean isDirectory()//是目录么

 public boolean isFile()//是文件么

 getName();//返回文件名

 getParent();//返回父目录名

 exists();//测试文件或目录是否存在。


3.1.4 使用FilenameFilter

 希望能够限制由list()方法返回的文件,使它仅返回那些与一定的文件名方式或者过滤器(filter)相匹配的文件。

  为达到这样的目的,必须使用list()方法的带参数的重载形式:

    public String[] list(FilenameFilter filter)

  在该形式中,filter是一个实现了FilenameFilter接口的类的对象。

  该接口中有一个accept()方法,只有该方法判断为true的文件名会被list方法返回。所以可以在accept方法中设置筛选规则。(这里使用了策略模式,可以回想一下java集合中的比较器)。


3.2 RandomAccessFile

RandomAccessFile类可以对文件随机访问的操作,访问包括读和写操作。该类的读写是基于指针的操作。 

RandomAccessFile对文件进行随机访问操作时有两个模式,一种是只读(r),另一种是读写(rw),需在创建RandomAccessFile对象时传入一个参数进行设置,第一个参数代表要访问的文件,第二个参数代表设置访问模式 

RandomAccessFile(File file,String mode) 
RandomAccessFile(String filename,String mode) 
只读模式: new RandomAccessFile(“filename”,”r”); 
读写模式: new RandomAccessFile(filename,”rw”);

RandomAccessFile常用方法汇总: 
void write(int d) 

该方法会根据当前指针所在位置处写入一个字节,是将参数int的”低8位”写出

int read() 
如果返回-1表示读取到了文件末尾, 每次读取后自动移动文件指针, 准备下次读取。

void write(byte[] d) 
根据当前指针所在位置处连续写出给定数组中的所有字节

void write(byte[] d,int offset,int len) 
根据当前指针所在位置处连续写出给定数组中的部分字节,这个部分是从数组的offset处开始,连续len个字节

int read(byte[] b) 
从文件中尝试最多读取给定数组的总长度的字节量,并从给定的字节数组第一个位置开始,将读取到的字节顺序存放至数组中,返回值为实际读取到的字节量

void close() 
RandomAccessFile在对文件访问的操作全部结束后,要调用close()方法来释放与其关联的所有系统资源

文件指针操作: 
RandomAccessFile的读写操作都是基于指针的,也就是说总是在指针当前所指向的位置进行读写操作。

long getFilePointer() 
获取当前指针位置

void seek(long pos) 
使用该方法可以移动指针到指定位置。

int skipBytes(int n) 
尝试跳过输入的 n 个字节以丢弃跳过的字节

总结: 
RandomAccessFile,优点是可以控制指针的位置,对文件进行指定位置的读写操作。 
但是同时也有一些缺点,执行效率比较慢,大量进行指针控制操作很耗内存。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值