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

javaIO详解、包含文件以及流操作的更多相关文章

  1. 详解Google Chrome浏览器(操作篇)(下)

    开篇概述 由于最近忙于公司产品的架构与研发,已经三个多月没有写博客了,收到有些朋友的来信,问为什么不及时更新博客内容呢,他们说他们正期待着某些内容.对此,非常抱歉,那么我在此也给各位朋友一些承诺,从即 ...

  2. 详解Google Chrome浏览器(操作篇)(上)

    开篇概述 在上篇博客中详解Google Chrome浏览器(理论篇)一文中,主要讲解了Chrome 搜索引擎使用.Chrome安装和基本操作.Chrome 基本架构.多线程等原理性问题,这篇将重点讲解 ...

  3. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系

    原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...

  4. Cookie 详解以及实现一个 cookie 操作库

    Cookie 详解以及实现一个 cookie 操作库 cookie 在前端有着大量的应用,但有时我们对它还是一知半解.下面来看看它的一些具体的用法 Set-Cookie 服务器通过设置响应头来设置客户 ...

  5. MFC中文件对话框类CFileDialog详解及文件过滤器说明

    当前位置 : 首页 » 文章分类 :  开发  »  MFC中文件对话框类CFileDialog详解及文件过滤器说明 上一篇 利用OpenCV从摄像头获得图像的坐标原点是在左下角 下一篇 Word中为 ...

  6. 17.3.15---C语言详解FILE文件操作

    FILE 是 C语言文件结构定义, 打开文件和文件操作要用到这类结构.可以看成变量类型,用于变量声明.这个是一种数据结构类型,用来表示一个文件的相关信息,如果定义了一个文件指针,就用这个指针来指向某个 ...

  7. 详解Google Chrome浏览器(操作篇)(一)

    开篇概述 在上篇博客中详解Google Chrome浏览器(理论篇)一文中,主要讲解了Chrome 搜索引擎使用.Chrome安装和基本操作.Chrome 基本架构.多线程等原理性问题,这篇将重点讲解 ...

  8. ***PHP $_FILES函数详解 + PHP文件上传 move_uploaded_file() 参数的正确写法

    PHP $_FILES函数详解 在PHP中上传一个文件建一个表单要比ASP中灵活得多.具体的看代码. 如:  复制代码代码如下: <form enctype="multipart/fo ...

  9. 面试必备:详解Java I/O流,掌握这些就可以说精通了?

    @TOC Java IO概述 IO就是输入/输出.Java IO类库基于抽象基础类InputStream和OutputStream构建了一套I/O体系,主要解决从数据源读入数据和将数据写入到目的地问题 ...

随机推荐

  1. 设计模式之 - 策略模式(Strategy Pattern)

    引入:项目中涉及到工作流,当然这个工作流的实现是由用户根据不同的策略或者说方式传入处理这个事件的人的审批链,后台在存储过程中进行解析,然后生成最终的审批链,在系统中流转进行审批. 比如审批链: 张三 ...

  2. MySQL 最左前缀(Leftmost Prefix) & 组合索引(复合索引,多列索引)

    资料来源于网络,仅供参考学习. CREATE TABLE test(a INT,b INT,c INT,KEY idx(a,b,c)); 优: SELECT * FROM test WHERE a=1 ...

  3. 初学ssm框架的信息

    ssm框架,就是Spring ,SpringMVC ,mybstis 的简称,我们是从mybstis 开始学起的,mybatis的作用作为一个连接数据库的框架,可以很好配置连接好数据库, 有mybat ...

  4. DES加解密、JavaScript、Java

    JavaScript代码    DES.js /** * Created by Andy on 2017/11/30. */ /** * DES加密/解密 * @Copyright Copyright ...

  5. Java UDP实现聊天功能代码

    我以前经常写的是基于TCP的网络编程,由于TCP建立连接鼻血要经过三次握手连接,服务器端需要阻塞式等待客户端的连接.而UDP则是可以直接向目的地址的目的端口上发送数据包,由于它只负责发送出去就好,不管 ...

  6. SQL基础学习_04_视图

    视图 1. 视图的创建     视图就是保存好的SELECT语句,这些SELECT语句执行之后会产生新的表,所以在SQL中,视图和表是不做差别对待的,也就是SQL也可以对视图做一些操作:     由于 ...

  7. python字符集的转换(mysql数据乱码的处理)

    本文参考:http://blog.csdn.net/crazyhacking/article/details/39375535 chardet模块:http://blog.csdn.net/tianz ...

  8. Nginx集群之基于Redis的WebApi身份验证

    目录 1       大概思路... 1 2       Nginx集群之基于Redis的WebApi身份验证... 1 3       Redis数据库... 2 4       Visualbox ...

  9. 【Python3的函数初识】

    一.函数 1.什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率,可扩展性强. 2.函数的分类 在python中函数分两类:内 ...

  10. PHP curl请求https遇到的坑

    PHP里curl对https的证书配置默认是服务器端要求验证的,如果服务器端没有配置证书验证,则无法请求https路径.如果为了简便使用不需要配置https证书的话,配置curl时将以下两项设置为fa ...