JAVA IO操作目标
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_零基础学JAVA
本季知识点
1、File类
2、RandomAccessFile类
File类
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_File类_02
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_03
在JAVA中所有的IO操作全部存放在java.io包中。
File是唯一一个与文件本身有关的操作。
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_IO操作_04
在使用File类的构造方法处必须加入一个完整的路径。
要求一:可以在F盘上建立一个新的文件:demo.txt文件。
public boolean createNewFile() throws IOException
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_05
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_06
看下效果:
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_07
我们发现系统提示非法转义字符,在前面学习正则时“\”表示转义,我们需要输入两个“\\”即“f:\\demo.txt”
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_IO操作_08
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_零基础学JAVA_09
需要进行try/catch处理
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_零基础学JAVA_10
现在发现文件出来了哈~
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_IO操作_11
如果现在再想创建同一个文件,我们会发现显示false,因为文件已经存在,不能再创建同一文件哈~
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_12
能否删除掉demo.txt的文件呢?
public boolean delete()
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_RandomAccessFile类_13
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_File类_14
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_15
要求:
如果文件存在则删除掉文件,如果文件不存在,则创建文件。
判断文件是否存在:public boolean exists()
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_IO操作_16
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_IO操作_17
注意点:
如果程序按以上格式写的话,则会有一个限制:
· windows:\
· linux:/
File类中提供了几分割符
public static final String separator
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_零基础学JAVA_18
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_File类_19
public String getPath()
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_零基础学JAVA_20
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_RandomAccessFile类_21
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_IO操作_22
判断给定的路径是否是一个目录:public boolean isDirectory()
 [零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_23
 [零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_IO操作_24
显示f:\demo.txt不是目录哈~
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_IO操作_25
再来看一个:
 [零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_File类_26
显示F:\TL-WN310G& TL-WN350G是目录哈~
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_27
通过这个方法可以判断给定的路径是否是目录哈~
要求可以列出指定目录下的全部文件。
· 返回完整路径:public String[] list() ;
· 返回全部的File对象:public File listFiles() ;
1、使用字符串数组操作
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_File类_28
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_零基础学JAVA_29
可以正常列出F:\资料目录下的文件和目录哈~
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_IO操作_30
2、使用File类对象数组
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_零基础学JAVA_31
使用File类可以开出路径哈~
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_零基础学JAVA_32
思考题:
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_RandomAccessFile类_33
不断的判断给定的路径是否是目录,如果是目录,则继续向下列出,此种题目只能使用递归操作完成。
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_零基础学JAVA_34
看下效果:
 [零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_零基础学JAVA_35
 [零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_36
注意:递归操作可能会导致内存泄漏问题~~~
输入输出方法
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_37
读写过程
 [零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_RandomAccessFile类_38
RandomAccessFile
 [零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_零基础学JAVA_39
假设一个文件中存放了三组数据:
AA          80
BB          90
CC          99
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_IO操作_40
RandomAccessFile类
public RandomAccessFile(File file, String mode) throws FileNotFoundException
public RandomAccessFile(File file,               --> File 类的实例化对象
String mode)                                                --> 模式
throws FileNotFoundException
模式现在主要用两种:
· r:只读
· w:只写
· rw:读写            
 --> 如果没有文件,写时,会自动创建。
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_41
public final void writeBytes(String s) throws IOException
public final void writeInt(int v) throws IOException
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_42
看下效果:
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_43
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_44
现在我们可以写入数据了,下面我们将其读出来哈~
实际上读的时候只能按byte读出,byte只能一个一个的往外读。
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_IO操作_45
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_46
如果读完第一个人的数据,则此时指针在第二个人之前,如果继续往下读则会读取第二个人的数据,我们测试一下哈~~
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_RandomAccessFile类_47
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_RandomAccessFile类_48
如果我们想不读取第一个人的数据,直接读取第二个人的数据,看下面哈~~
public final byte readByte() throws IOException
public int skipBytes(int n) throws IOException
public void seek(long pos) throws IOException
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_RandomAccessFile类_49
看下效果,直接读取第二个人数据了哈~
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_50
如果要读取第三个人数据就是跳过16个字节哈~raf1.skipBytes(16);
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_51
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_IO操作_52
现在我们是一直往下读哈,我们要使指针往回读取数据呢?
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_零基础学JAVA_53
看下效果:
[零基础学JAVA]Java SE应用部分-27.Java IO操作(01)_JAVA_54
虽然此类可以比较灵活的实现读写操作,可是也是有缺点的,因为必须知道的其跳的长度。
真正开发中使用的数据读取类:InputStream、OutputStream、Reader、Writer,下季再见分晓哈~~~~
##############################################################