java的IO操作都在java.io包下面,这个包下面有12个接口和而是多各类,类从读写的角度可以分为两种,一种是用于读,一种是用于写;从字符流字节流的角度,也可以分为两种,一种和字符有关,一种和字节有关。这样,所有的类就分为了四种。java的分类方式是先按字节字符分,在分读和写,继承的关系图如下:

所谓读写,就是把从一个源把数据读入内存,或者把内存里的数据写入到一个目的地。所以要进行读写,首先就必须要有一个读的源或者写的目的。这个源或者目的地可以是本地的文件、连接,也可以是个网络接口,还可以是内存里的对象比如Byte[],String,管道或者其他流。

按照正常的学习路径,一般人都会先从本地文件的读写学起,要读取本地的文件,那么首先就是要怎么样找到这个文件,这涉及到文件系统,文件系统就是文件夹、子文件夹、文件组成的一棵树。所以,我们先不学怎么读写文件,先学习怎么操作这棵树。

操作这棵数最重要的是一个叫File的类,这个类虽然叫“File”,但其实它更像是一个文件路径的代表或者说句柄,提供对文件的各种操作,不仅提供文件的操作,还提供对文件夹的操作。这个类可以创建或删除文件/文件夹,也可以查文件/文件夹的各项属性,还可以检测文件/文件夹是否存在。

那既然是涉及到文件树,那就比如涉及到怎么表达一个路径了,我们知道,windows是以类似这样的方式表达一个路径的:c:\\directory\\subdirectory\\file.txt, linux/unix则是: /directory/subdirectory/file.txt。java采用的是平台无关的设计,所以统一用linux/unix的方式,所以windows下,就变成了:/c:/directory/subdirectory/file.txt。也就是说不用反斜杠。当然,如果一定要写成c:\\directory\\subdirectory\\file.txt,也是可以的,但是只能用在windows下面。

下面来一一介绍File使用的一些需要注意的地方:

1、 在介绍之前,先明白一个概念,这个概念后多次用到:“当且仅当”的意思是完全按照预先的目标实现了操作的意思,比如“当且仅当删除成功”的意思是“原本文件确实存在,并且我真的成功把它删除了”,如果文件本来就不存在,那不能说明你成功把它删除了,因为他本来就不存在,功劳不在你身上。在javadoc里面用的是“if and only if”。

2、File的path可以是绝对路径,也可以是相对路径。当使用相对路径的时候,是相对于当前工作路径的。另外在windows下,如果不指定驱动盘号,则绝对路径是以当前盘下的根目录为根目录的,比如在F盘,那么“/directory”则对应于"f:\directory"。

1、创建文件夹

File提供了两个函数来创建夹:mkdir和mkdirs。他们的区别是前者必须要保证上一级文件夹存在,后者则会自动创建各级问价夹。这两个函数的返回值都是boolean,当且仅当返回true,如果涉及到权限问题,这抛出SecurityException异常。

2、创建文件

文件用createNewFile,如果文件原本不存在,就创建一个新的空文件并返回true,如果问价已经存在了,则不做任何动作并返回false。

还有两个函数createTmpFile(String prefix,String suffix)、createTmpFile(String prefix,String suffix,File directory)很有趣,他们是创建具有指定前缀后后缀的零时文件,临时文件的前缀和后缀之间的字母,会自动编号防止重复,这点在需要生产临时文件的时候很有用。二者的区别是前者把临时文件创建在系统默认临时文件目录,后者用directory指定的目录。

3、删除

删除很简单,就只有delete一个函数,但是需要注意的是,删除文件夹的时候,文件夹本身必须是空的,否则抛出IOEexetion异常。当且当且仅当文件(夹)被成功删除返回true,否者返回false。

4、查询和检测

查询包括查时间、类型、是否存在是什么等等,如果类型是文件夹,那么还可以查文件夹里面有啥、容量大小。查询需要有查询权限,否则报SecurityException异常。

5、路径操作

其实路径操作有点像查询,但是和查询不同,查询设计到文件(夹)是否存在的问题,如果文件不存在,那就不可能被查询。但是路径操作可以不要求文件存在,前面提到,File更像是一个文件的代表或者说句柄,所以,File可以实现仅仅对path本身操作,就和操作字符串一样,而不用关心在文件系统中是否真的存在这样一个文件(夹)。所以,如果问价夹不存在,也可以使用getParent、getParentName和getAbsoluteFile、getAbsolutePath这样的文件路径操作。

6、属性操作

属性操作包括了改变可读性、可写性和可执行性,如果你熟悉Linux的话,它和chmod实现的操作差不多

7、转化

把这个File这个路径代表转化为String、url。

可以看到File类比较乱,把文件操作和路径操作搞在同一个类,而且对于很多操作失败(比如删除一个空文件,创建一个已经存在的文件)都只是简单地返回一个false,而不是返回异常,所以是很不方便的一个类。这个类是从jdk1.0开始就有的,从jdk1.7(即java 7)开始,java使用Path接口 和Files类来分离路径操作和文件操作,并且放在了java.nio.file包下面。下一篇将学习java.nio.file包下的操作文件方式。

java io 学习笔记(一)的更多相关文章

  1. Java IO学习笔记:概念与原理

    Java IO学习笔记:概念与原理   一.概念   Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了 ...

  2. Java IO学习笔记总结

    Java IO学习笔记总结 前言 前面的八篇文章详细的讲述了Java IO的操作方法,文章列表如下 基本的文件操作 字符流和字节流的操作 InputStreamReader和OutputStreamW ...

  3. Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...

  4. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  5. Java IO学习笔记一

    Java IO学习笔记一 File File是文件和目录路径名的抽象表示形式,总的来说就是java创建删除文件目录的一个类库,但是作用不仅仅于此,详细见官方文档 构造函数 File(File pare ...

  6. Java IO学习笔记一:为什么带Buffer的比不带Buffer的快

    作者:Grey 原文地址:Java IO学习笔记一:为什么带Buffer的比不带Buffer的快 Java中为什么BufferedReader,BufferedWriter要比FileReader 和 ...

  7. Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer

    作者:Grey 原文地址:Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer ByteBuffer.allocate()与ByteBuffer.allocateD ...

  8. Java IO学习笔记三:MMAP与RandomAccessFile

    作者:Grey 原文地址:Java IO学习笔记三:MMAP与RandomAccessFile 关于RandomAccessFile 相较于前面提到的BufferedReader/Writer和Fil ...

  9. Java IO学习笔记四:Socket基础

    作者:Grey 原文地址:Java IO学习笔记四:Socket基础 准备两个Linux实例(安装好jdk1.8),我准备的两个实例的ip地址分别为: io1实例:192.168.205.138 io ...

  10. Java IO学习笔记六:NIO到多路复用

    作者:Grey 原文地址:Java IO学习笔记六:NIO到多路复用 虽然NIO性能上比BIO要好,参考:Java IO学习笔记五:BIO到NIO 但是NIO也有问题,NIO服务端的示例代码中往往会包 ...

随机推荐

  1. Replication--复制问答

    在发布表尾部增加字段,需要重新初始化订阅么?答:在发布表尾部增加字段,不需要不需要重新初始化订阅,该修改会自动同步到订阅段,也不需要对复制做任何修改.但如果在同一个发布中增加新的项目,需要重新初始化订 ...

  2. SQL数据库查询语言(1)

    目录 MySQL数据库 MySQL安装与配置 DDL数据定义语言 创建数据库 查看.删除数据库 修改.备份.恢复数据库 创建表 修改表 MySQL常用数据类型 DML数据操纵语言 Insert语句 m ...

  3. zookeeper安装和使用 windows

    的 Zookeeper 是以 3.4.5 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非常简单, ...

  4. kali linux之主动信息收集(二层发现)

    主动信息收集: 直接与目标系统交互信息,无法避免留下访问的痕迹 使用受控的第三方电脑进行探测,如(使用代理或者使用肉鸡,做好被封杀的准备,使用噪声迷惑目标,淹没真实的探测流量) 识别活着的主机,会有潜 ...

  5. php代码审计3审计sql注入漏洞

    SQL注入攻击(sql injection)被广泛用于非法获取网站控制权,在设计程序时,忽略或过度任性用户的输入,从而使数据库受到攻击,可能导致数据被窃取,更改,删除以及导致服务器被嵌入后门程序等 s ...

  6. Ubuntu 安装后的配置及美化(一)

    Ubuntu 安装后的配置及美化(一) 记录一下 完成后的主界面. 配置 1.更新源为阿里云 找到 软件和更新 选项,更新源为阿里云的源. 在 其他软件 中将 Canonical合作伙伴 打上勾. 然 ...

  7. 八大排序算法的python实现(六)归并排序

    代码: #coding:utf-8 #author:徐卜灵 def merge(left,right): i,j = 0,0 result = [] while i < len(left) an ...

  8. python3入门之字符串

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 经过前面的介绍相信大家也对python有了一个初步的了解:本节主要介绍字符串,不管学习什么编语言字符串一定在其中扮演着重要的地位.本节主要讲解,字 ...

  9. python模块-hmac

    Hmac算法:Keyed-Hashing for Message Authentication.它通过一个标准算法,在计算哈希的过程中,把key混入计算过程中. import timefrom has ...

  10. 基于python-opencv3的图像显示和保存操作

    import cv2 as cv import numpy as np                        #导入库 print("------------------------ ...