1.File 文件操作

java.io.File用来表示文件或者目录。只能用来表示文件或者目录的大小名称等信息,而无法完成对文件内容的CRUD。

1.1构造方法

有四种,当然基本都是根据文件的路径或者直接文件的名字进行创建。注意,此时的创建并非真正意义上的创建。只是在程序中创建了一个File文件。仅此而已。硬盘中并未出现文件。

1.2常用方法

针对文件

1.boolean createNewFile() :用于真正的创建文件。返回值为boolean值。当且仅当成功创建的时候。返回true

2.boolean isFile() :用来判断该File对象是否是文件。

3.boolean exists() :用来判断该File对象是否存在。可以判断目录,也可以判断文件。只要存在,则返回true。不存在,false。因此在创建文件或者目录时,都会实现进行判断,不存在才进行创建。

4.boolean delect():用来删除文件或者目录。成功删除true。删除失败false。当删除一个目录时,注意目录下必须为空目录(也就是没有子项)才能删除。否则删除失败。

5.long length():用来返回File对象所表示的文件的长度,也就是返回字节量。注意。当File对象不代表任何文件时,也就是文件还没有被创建时。该方法返回为0.

针对目录

1.boolean isDirectory():用来判断File对象是否表示一个目录。当然如果该目录没有被创建,那么该方法返回false。只有该File对象调用了创建目录的方法。该方法才返回true。

注意,如果一个File对象已经创建了文件,那么它就不能继续创建成目录。反之也是如此。也就是说,一个File对象。要么创建成文件,要么创建成目录。

2.boolean mkdir():用来创建目录,但是只能一层一层的创建,无法创建多层目录。也就是说,如果父目录没有存在。那么系统会报错。找不到指定的路径。这是因为mkdir无法创建多层目录导致的。也就是说,要想创建多层目录,必须一步一步来,从父目录创建开始,再创建子目录。

3.boolean mkdirs():用来创建多层目录,创建时不需要父目录已存在。但是该方法创建失败时可能已经成功的创建了一部分父目录。因此创建多层目录时建议使用mkdirs。

4.boolean delect():用来删除目录,但是记住,目录必须为空目录。也就是没有子项。也就是说,多层目录的删除,必须从子目录开始,一步一步删除。这个没有多层目录一步删除的方法。

5. File[] listFiles():返回一个File代表的目录下的所有文件和目录。File代表的必须时目录才调用这个方法哟。如果是文件调用这个方法,只会返回null的哟。

除此之外,listFiles()还有一个重载方法,File[] listFiles(FileFilter filter)。实现了FileFilter接口。该接口中有一个accept方法。可以通过重写accept方法来定义自己想要的规则。并根据规则返回文件和目录。

 

2.文件读写操作。基于RandomAccessFile

在上面讲到的File操作。是对文件目录进行创建删除、查看整体大小名字等整体属性。且不能对文件本身内容进行查看或者修改。接下来介绍一个能够对文件内容进行CRUD的java封装类。RandomAccessFile。它的操作是针对于指针的读写操作。记住,他是针对文件的。于目录无关。

1.构造方法:

可以通过File对象或者文件的具体路径进行创建。然后输入想要进行的模式,分为只读“r" 和读写”rw“.

2.常用方法

2.1读操作read方法。有三种。

  1.int read():此方法提供了从指定文件中读取一个字节的方法。并将该字节填充到int值的低八位返回出去。因此该int值为0-255.如果返回值为-1.则表示读取到了文件末尾。每次读取后,指针都会移动一位字节,以待下次读取。

  2.int read(byte[] b ):此方法提供了批量读取字节的方法。并将读取到的字节全部放到数组b中。因此,如果数组b的长度足够,那么文件中的所有字节都会存储到b中。如果数组b长度不够,那么只会存储满b。就不会再读取了。返回值为实际读取的字节量。且读取完毕后,指针移动了实际读取的字节量。一定要小心指针的移动。randomaccessFile就是基于指针的移动来读写文件的。因此。在实际编程的过程中。一定要注意指针的移动。要不然就发现很多时候你刚刚写完然后读不出来,就是指针在最后,导致你读不出数据。

这种方法就是缓存的机制。减少对文件的频繁读取操作。而是定义一个数组,每次都将数组填满后再进行读写。节省系统资源。

  3.int read(byte[] b ,int off, int len):提供了批量读取字节的方法。将off表示数组b中的偏移量。也就是b中从哪里开始。len 表示 读取的最多字节数。

这里要注意off+len 不能大于 b的长度。要不然会出现数组越界的异常。

 

2.2写操作write方法,也是有三种

1.void write(int d):该方法表示往指定文件中写入1个字节的方法。是将int类型的低八位写出。文本中看到的是asca码。0-255.。注意指针也会移动

2.void write(byte[] b):该方法表示向指定文件中写入多个字节的方法。很常用。我们一般都会使用这个方法。利用字符的.getbytes方法将字符转化成字节数组。并将其写入文件中。注意,指针也会移动。

3.void write(byte[] b, int offset, int len):该方法表示向指定文件中写入指定数组的部分字节的方法。这个部分是从数组的offset下标开始,持续len个字节。此时也要注意越界的问题。

 

2.3 close方法

调用完randomAccessFile后,记得使用close方法,关闭且释放系统资源

 

2.4文件指针操作

我们说过,RandomAccessFile是针对指针进行读写的。接下来介绍一下指针的一些常用方法

  1.long getFilePointer():返回当前指针的地址。raf刚创建时。指针默认指向第一个字节。此时该方法返回值为0

  2.void seek(long pos) :移动指针到指定位置,该位置为pos。

  3.int skipBytes(int n):指针由所在位置跳过n个字节。也就是灵活的调整指针的位置。让指针增加n。

 2.5

文件编码

UTF-8编码:中文占用3个字节,英文占用1个字节 
GBK编码:中文占用2个字节,英文占用1个字节 
UTF-16BE编码:中文占用2个字节,英文占用两个字节

 

3.java正规IO操作:流