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操作:流

最新文章

  1. 学习笔记 UpdateXml() MYSQL显错注入
  2. SQL Server AlwaysOn
  3. jstl标签2
  4. 【BZOJ2223/3524】[Coci 2009]PATULJCI
  5. 关于微信网页调用js-sdk相关接口注意事项目(一级域名与二级域名互相干扰!!!)
  6. Web Design:给实验室UI们的一堂课(下)
  7. C# 抽象类和接口的区别
  8. Eclipse中的Web项目自动部署到Tomcat(转)
  9. 【疯狂Java学习笔记】【理解面向对象】
  10. [Form Builder]APP_ITEM_PROPERTY.SET_PROPERTY 用法
  11. STL中的所有算法(70个)
  12. 基于zepto的移动端日期和时间选择控件
  13. Xcode使用心得03:打开僵尸(Zombie)模式
  14. muse-ui底部导航自定义图标和字体颜色
  15. [Linux]安装pyenv
  16. Problem 9: Special Pythagorean triplet
  17. 不使用Visual Studio开发ASP.NET MVC应用(下篇)
  18. [JAVA]字节数组流
  19. Microsoft Dynamics CRM 9.0 OP 版本 移动端
  20. 你不知道的JavasScript上篇·第三章·对象

热门文章

  1. Android测试:Building Local Unit Tests
  2. Another option for file sharing(转)
  3. Spring基础篇——Spring容器和应用上下文理解
  4. Linux - Shell常用指令
  5. 解决360随身wifi每天首连频繁断线
  6. Tomcat 组件介绍
  7. SpringBoot入坑-项目搭建
  8. Looping over the databases on a server
  9. nmon进行性能分析
  10. 内核,配置WinDbg,调试操作系统(双机调试)