Java输入输出
输入机制,允许程序读取外部数据(包括来自硬盘、光盘等存储设备的数据;
输出机制
通过java.io包下的类和接口来支持,包括输入输出两种IO流,每种输入输出流又可分为字节流和字符流两大类
java 7在java.nio及其子包下提供了一系列全新的API,是对原有新IO的升级,被称为NIO 2,可以更高效的进行输出输入操作
1. File类
1.1 访问文件和目录
使用路径字符串(绝对路径或相对路径)创建File实例.使用用户的工作路径来解释相对路径,由系统属性”user.dir”指定,通常是Java虚拟机所在的目录.
- 访问文件名相关的方法
String getName():返回此File对象所表示的文件名或路径名(如果是路径,则返回最后级子路径名).
String getPath():
返回此File对象所对应的路径名.File getAbsoluteFile():
返回此File对象的绝对路径.String getAbsolutePath():返回此File对象所对应的绝对路径名.
String getParent():返回此File对象所对应目录(最后一级子目录)的父目录名.
boolean renameTo(File newName);重命名此File对象所对应的文件或目录,如果重命名成功,则返回true;否则返回false.
文件检测相关的方法
boolean exists():
判断File对象所对应的文件或目录是否存在.boolean canWrite():判断File对象所对应的文件和目录是否可写.
boolean canRead():判断File对象所对应的文件和目录是否可读.
boolean isFile(): 判断File对象所对应的是否是文件,而不是目录.
boolean isDirectory():判断File对象所对应的是否是目录,而不是文件.
boolean isAbsolute():判断File对象所对应的文件或目录是否是绝对路径.该方法消除了不同平台的差异,可以直接判断File对象是否为绝对路径.在UNIX/LinuxBSD等系统上,如果路径名开头是条斜线(/),则表明该File对象对应一个绝对路径;在 Windows等系统上,如果路径开头是盘符,则说明它是一个绝对路径.
获取常规文件信息
long lastModified():返回文件的最后修改时间.
long length():返回文件内容的长度.
文件操作相关的方法
boolean createNewFile():当此File对象所对应的文件不存在时,该方法将新建一个该File对象所指定的新文件,如果创建成功则返回true;否则返回false
boolean delete():删除File对象所对应的文件或路径.
static File createTempFile(String prefix, String suffx):在默认的临时文件目录中创建一个临时的空文件,使用给定前缀、系统生成的随机数和给定后缀作为文件名.这是一个静态方法,可以直接通过File类来调用.prefix 参数必须至少是3字节长.建议前缀使用一个短的、有意义的字符串,比如”hjb” 或”mail”. suffix参数可以为null, 在这种情况下,将使用默认的后缀“.tmp”.
static File createTempFile(String prefix, String suffix, File directory) :在directory所指定的目录中创建一个临时的空文件,使用给定前缀、系统生成的随机数和给定后缀作为文件名.这是一个静态方法,可以直接通过File 类来调用.
void deleteOnExit():注册一个删除钩子,指定当Java 虚拟机退出时,删除File对象所对应的文件和目录.
目录操作相关的方法
- boolean mkdir():试图创建一个File对象所对应的目录,如果创建成功,则返回true;否则返回false.调用该方法时File对象必须对应一个路径,而不是一个文件.
- String[] list():列出File对象的所有子文件名和路径名,返回String数组.
- File[] listFiles():列出File对象的所有子文件和路径,返回File 数组.
- static FIile[] llisRoots():列出系统所有的根路径.这是一个静态方法,可以直接通过File 类来调用.
字节流操作的是8位的字节,字符流操作的是16位的字符
字节流以InputStream和OutputStream为基类,字符流以Reader和Writer为基类
InputStream和Reader
InputStream和Reader是所有输入流的抽象基类,本身并不能创造实例来执行输入,但他们将成为所有输入流的模板,所有他们的方法是所有输入流都可以用的方法.
InputStream中有三个方法:
- int read():从输入流中读取单个字节,返回所读取的单个字节数据(字节数据可直接转换为int类型)
- int read(byte[] b):从输入流中最多读取b.length个字节的数据,并将其存储在字节数组b中,返回实际读取的字节数
- int read(byte[] b,int off,int len):从输入流中最多读取len个字节的数据,并将其存储在字节数组b中,放入数组b中并不是从数组起点开始,而是从off位置开始,返回实际读取的字节数
Reader中有三个方法:
- int read():从输入流中读取单个字符,返回所读取的单个字符数据(字符数据可直接转换为int类型)
- int read(char[] cbuf):从输入流中最多读取cbuf.length个字节的数据,并将其存储在字符数组cbuf中,返回实际读取的字符数
- int read(char[] cbuf,int off,int len):从输入流中最多读取len个字符的数据,并将其存储在字符数组cbuf中,放入数组cbuf中并不是从数组起点开始,而是从off位置开始,返回实际读取的字符数
1 | package utils;/* |