IO

1.概念

1)IO概念:Java程序对数据的操作是通过“流”IO的方式,IO流用来处理设备间的数据传输(上传和下载文件)
2)流的概念:流是一组有顺序的、有起点有终点的集合(Byte),是对数据传输的一种抽象,它就是为了数据传输。

2.流的分类

1)按照数据流向的不同分为:

类型

过程

输入流

将持久化的文件数据加载到内存(读取外部数据进入程序)。

输出流

将内存中的数据持久化到磁盘(将程序中的数据保存到磁盘)

2)按照处理数据类型的单位不同分为:

类型

过程

字节流

以字节byte为单位,如:音频、视频、图片(一次读入或者读出8位二进制)

字符流

以字符char为单位,如:文本文件(一次读入或读出16位二进制)

注意纯文本数据优先选择字符流,除此之外全部使用字节流。
3)按照角色功能划分为:

类型

过程

节点流

直接作用于文件的或者直接与数据相连(文件流)如FileInputStream

处理流

加速文件的读写操作,在节点流上面套接了一层(主要指缓冲流BufferedInputStream)

3.IO流的体系结构

1)在Java程序中,为了对不同来源和性质的流对象调用统一的方法,Java中的流定义了顶层输入/输出的窗口或者抽象类。满足不同性质具体的流对象就会有同一的方法。
2)在Java中有四个基本的抽象流类型,所有的流都继承于它们四个。

类型/流向

输入流

输出流

字节流

InputStream

OutputStream

字符流

Reader

Writer

3)按照角色功能划分

抽象基类

节点流

缓冲流

InputStream

FileInputStream(字节输入流)

BufferedInputStream(字节输入缓冲流)

OutputStream

FileOutputStream(字节输出流)

BufferedOutputStream(字符输入缓冲流)

Reader

FileReader(字符输入流)

BufferedReader(字符输入缓冲流)

Writer

FileWriter(字符输出流)

BufferedWriter(字符输出缓冲流)

4.File类

1)File类是Java中处理文件的类
2)其中的方法涉及文件的创建、删除、重命名等,并不包括文件的内容读写,只要涉及到内容一定要IO流来处理。
3)路径:
绝对路径:包含盘符在内的完整文件路径
相对路径:在当前文件目录下的文件路径(相对于Java工程)
:表示电脑磁盘上默认的路径分隔符
\:在Java编译器中使用的形式(在上面的基础上加转义字符)
/:在路径中相当于“\”,是Java程序中路径的另一种表现形式。

// 绝对路径
		File f1 = new File("d:\\io\\helloworld.txt");
		// 相对路径
		File f2 = new File("hello.txt");
		File f3 = new File("Hello.txt");
		
		System.out.println("获取文件名称"+f1.getName());
		System.out.println("获取文件的目录:"+f1.getPath());
		System.out.println("获取文件的目录:"+f2.getPath());
		// 获取绝对路径
		System.out.println(f1.getAbsolutePath());
		System.out.println(f2.getAbsolutePath());
	
		System.out.println("获取文件所在的父级目录"+f1.getParent());
		// 实现文件重命名(要求原始文件一定存在,目标文件不一定存在)
		boolean renameTo = f2.renameTo(f3);
		System.out.println(renameTo);

4)常用方法:

常用方法

含义

exists()

判断是否存在

CanWrite()

是否可写

canRead()

是否可读

isFile()

是否为文件

isDirectory()

是否为目录

length()

文件的长度

lastModify()

最后一次修改的时间

createNewFile()

新建文件

delete()

删除

mkdir()

创建文件目录

mkdirs()

递归创建目录

list()

列出当前目录下的所有文件

listFiles()

列出

@Test
	public void test2() {
		File f1 = new File("d:\\io\\hello.txt");
		File f2 = new File("d:\\io\\oo");
		System.out.println(f1.exists());
		System.out.println(f2.exists());
		System.out.println(f1.canWrite());
		System.out.println(f1.canRead());
		System.out.println(f1.isFile());
		System.out.println(f1.isDirectory());
		System.out.println(f2.isDirectory());
		System.out.println(f1.length());
		// 获取最后一次修改的时间
		long time = f1.lastModified();
		Date date = new Date(time);
		String lastModify = new SimpleDateFormat("yyyy-MM-dd").format(date);
		System.out.println();
	}

还有下面这些:

@Test
	public void test3() throws IOException {
		File f1 = new File("d:/io/hello.txt");
		// 删除文件
		f1.delete();
		if(!f1.exists()) {
			boolean b = f1.createNewFile();
			System.out.println(b);
		}
		// 创建目录
		File f2 = new File("d:/io/oo1");
		if(!f2.exists()) {
			f2.mkdir();
		}
		// 递归创建
		File f3 = new File("d:/io/a/b/c");
		f3.mkdirs();
		
		// 列出当前目录下所有文件
		File f4 = new File("d:/io");
		String[] list = f4.list();
		for (String string : list) {
			System.out.println(string);
		}
		System.out.println("--------------------");
		File[] files = f4.listFiles();
		for (File file : files) {
			System.out.println(file);
		}
	}