Java输入输出

输入机制,允许程序读取外部数据(包括来自硬盘、光盘等存储设备的数据;

输出机制

通过java.io包下的类和接口来支持,包括输入输出两种IO流,每种输入输出流又可分为字节流和字符流两大类

java 7在java.nio及其子包下提供了一系列全新的API,是对原有新IO的升级,被称为NIO 2,可以更高效的进行输出输入操作

1. File类

1.1 访问文件和目录

使用路径字符串(绝对路径或相对路径)创建File实例.使用用户的工作路径来解释相对路径,由系统属性”user.dir”指定,通常是Java虚拟机所在的目录.

  1. 访问文件名相关的方法
  • String getName():返回此File对象所表示的文件名或路径名(如果是路径,则返回最后级子路径名).

  • String getPath():
    返回此File对象所对应的路径名.

  • File getAbsoluteFile():
    返回此File对象的绝对路径.

  • String getAbsolutePath():返回此File对象所对应的绝对路径名.

  • String getParent():返回此File对象所对应目录(最后一级子目录)的父目录名.

  • boolean renameTo(File newName);重命名此File对象所对应的文件或目录,如果重命名成功,则返回true;否则返回false.

  1. 文件检测相关的方法

    • boolean exists():
      判断File对象所对应的文件或目录是否存在.

    • boolean canWrite():判断File对象所对应的文件和目录是否可写.

    • boolean canRead():判断File对象所对应的文件和目录是否可读.

    • boolean isFile(): 判断File对象所对应的是否是文件,而不是目录.

    • boolean isDirectory():判断File对象所对应的是否是目录,而不是文件.

    • boolean isAbsolute():判断File对象所对应的文件或目录是否是绝对路径.该方法消除了不同平台的差异,可以直接判断File对象是否为绝对路径.在UNIX/LinuxBSD等系统上,如果路径名开头是条斜线(/),则表明该File对象对应一个绝对路径;在 Windows等系统上,如果路径开头是盘符,则说明它是一个绝对路径.

  2. 获取常规文件信息

    • long lastModified():返回文件的最后修改时间.

    • long length():返回文件内容的长度.

  3. 文件操作相关的方法

    • 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对象所对应的文件和目录.

  4. 目录操作相关的方法

    • 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package utils;/*
* @Author Sheng WenZeng
* @Date 2019/8/3 13:48
* @Version 1.0
*/

import java.io.FileInputStream;
import java.io.IOException;

/**
* @author Sheng Wenzeng
* @ClassName FileInputStreamTest
* @Description TODO
* @Date 2019/8/3 13:48
* @Version 1.0
*/
public class FileInputStreamTest {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream = new FileInputStream("C:\\Users\\盛文增\\Desktop\\IDEAProject\\WeChatMiniProgram\\src\\main\\java\\utils\\FileInputStreamTest.java");
byte[] cbuf = new byte[1024];
int hasRead = 0;
while ((hasRead = fileInputStream.read(cbuf)) > 0) {
System.out.println(new String(cbuf, 0, hasRead));
}
fileInputStream.close();
}
}

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×