欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java IO流

程序员文章站 2022-04-03 07:58:34
...

IO流

Java IO流

File类:

File的常⽤⽅法:

  1. public File(String pathname) 根据路径创建对象
  2. public String getName() 获取⽂件名
  3. public String getParent() 获取⽂件所在的⽬录
  4. public File getParentFile() 获取⽂件所在的⽬录对应的File对象
  5. public String getPath() 获取⽂件路径
  6. public boolean exists() 判断对象是否存在
  7. public boolean isDirectory() 判断对象是否为⽬录
  8. public boolean isFile() 判断对象是否为⽂件
  9. public long length() 获取⽂件的⼤⼩,以字节为单位
  10. public boolean createNewFile() 根据当前对象创建新⽂件
  11. public boolean delete() 删除对象
  12. public boolean mkdir() 根据当前对象创建新⽬录
  13. public boolean renameTo(File dest) 为已存在的对象重命名

以下为参考代码:

public class fileTest {
	public static void main(String[] args) {
		String pathName = "C:/Users/73981/Desktop/test/test2";
		File file = new File(pathName);
		//判断该文件是否存在	---	file.exists()
		if(file.exists()) {			
		//获取文件名 --- file.getName()
			System.out.println("该文件名为: " + file.getName());
		//获取⽂件所在的⽬录
			System.out.println("该文件所在的目录为: " + file.getParent());
		//获取⽂件所在的⽬录对应的File对象
			System.out.println(file.getParentFile());
		//获取⽂件路径
			System.out.println("文件路径为: " + file.getPath());
		//判断对象是否为⽬录
			System.out.println("该对象是否为一个目录: " + file.isDirectory());
		//判断对象是否为⽂件
			System.out.println("该对象是否为一个文件: " + file.isFile());
		//获取⽂件的⼤⼩,以字节为单位
			System.out.println("该文件的大小为: "+ file.length());
		//删除对象(文件、目录皆适用)
		//	System.out.println("删除对象: " + file.delete());
		//为已存在的对象重命名
			File file3 = new File("C:/Users/73981/Desktop/test测试");
			
			System.out.println("重命名: " + file.renameTo(file3));
		}else{
			//根据当前对象创建新⽂件,如果该文件已经存在不能重复创建。
//			try {
//				System.out.println("创建名为test2.txt的新文件: " + file.createNewFile());
//			} catch (IOException e) {
//				// TODO 自动生成的 catch 块
//				e.printStackTrace();
//			}
			
			//根据当前对象创建新⽬录
				File file2 = new File(pathName);
				System.out.println("创建新目录" + file2.mkdir());
		}
		
	}
}

什么是流:

流就是⼀组有序的数据序列,以先进先出的⽅式发送数据的通道。

Java中的流有很多种不同的分类:
  1. 按照⽅向分,可以分为输⼊流和输出流。 如何判断输⼊还是输出,站在Java程序⻆度,看数据是从外界来到Java中呢还是从Java中输出到外界,外届-Java 就是输⼊流, Java-外界 就是输出流。
  2. 按照单位分,可以分为字节流和字符流。 字节流指每次处理数据都是以字节为单位,字符流是指每次处理数据都是以字符为单位。
  3. 按照功能分,可以分为节点流和处理流。

字节流按照⽅向可以分为输⼊字节流(InputStream)和输出字节(OutputStream):

InputStream是java.io包中的顶层⽗类,实现了Closeable接⼝,该接⼝的作⽤是每次操作结束之后释放资源
InputStream常⽤的⽅法:

  1. public abstract int read() 以字节为单位读取⽂件中的数据
  2. public int read(byte b[]) 将数据存⼊byte类型的数组中,并返回数据的⻓度
  3. public int read(byte b[],int off,int len) 将数据存⼊byte类型的数组的指定区间中,并返回数据的⻓度
  4. public byte[] readAllBytes() 将数据存⼊byte类型的数组中,并返回该数组
  5. public int available() 返回当前数据中未读取的数据个数
  6. public void close() 关闭数据流
  • 实际开发中不能直接实例化InputStream,因为它是⼀个抽象类,应该实例化其实现了抽象⽅法的⼦类, FileInputStream
  • FileInputStream的实例化就相当于⼀根连接到某个⽂件的管道,通过该管道就可以把⽂件中的数据取出读取到Java程序中, FileInputStream只能连接⽂件,不能连接⽬录,否则会抛出FileNotFoundException。
  • read()读取数据,每⼀此read()返回值就是⼀个字节的数据,如果取出的数据为-1,则表示该⽂件的所有的数据已经全部取出。

  1. 以字节为单位的输入流的框架图:
    Java IO流
(01) InputStream 是以字节为单位的输入流的超类。InputStream提供了read()接口从输入流中读取字节数据。
(02) ByteArrayInputStream 是字节数组输入流。它包含一个内部缓冲区,该缓冲区包含从流中读取的字节;通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的。
(03) PipedInputStream 是管道输入流,它和PipedOutputStream一起使用,能实现多线程间的管道通信。
(04) FilterInputStream 是过滤输入流。它是DataInputStream和BufferedInputStream的超类。
(05) DataInputStream 是数据输入流。它是用来装饰其它输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。
(06) BufferedInputStream 是缓冲输入流。它的作用是为另一个输入流添加缓冲功能。
(07) File 是“文件”和“目录路径名”的抽象表示形式。关于File,注意两点:
a), File不仅仅只是表示文件,它也可以表示目录!
b), File虽然在io保重定义,但是它的超类是Object,而不是InputStream。
(08) FileDescriptor 是“文件描述符”。它可以被用来表示开放文件、开放套接字等。
(09) FileInputStream 是文件输入流。它通常用于对文件进行读取操作。
(10) ObjectInputStream 是对象输入流。它和ObjectOutputStream一起,用来提供对“基本数据或对象”的持久存储。


  1. 以字节为单位的输出流的框架图:
    Java IO流
  2. 以字节为单位的输入流和输出流关联的框架图:
    Java IO流
  3. 以字符为单位的输入流的框架图:
    Java IO流
  4. 以字符为单位的输出流的框架图:
    Java IO流
  5. 以字符为单位的输入流和输出流关联的框架图:
    Java IO流
  6. 字节转换为字符流的框架图:
    Java IO流
  7. 字节和字符的输入流对应关系:
    Java IO流
  8. 字节和字符的输出流对应关系:
    Java IO流
相关标签: Java IO