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);
}
}