1.File类
1.1File类介绍
- 它是文件和目录路径名的抽象表示
- 文件和目录是可以通过File封装成对象的
- 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以 是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的
1.2File类的构造方法
方法名 |
说明 |
File(String pathname) |
通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例 |
File(String parent, String child) |
从父路径名字符串和子路径名字符串创建新的 File实例 |
File(File parent, String child) |
从父抽象路径名和子路径名字符串创建新的 File实例 |
示例代码:
public class FileDemo1 {
public static void main(String[] args) {
//File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File f1 = new File("E:\\demo\\java.txt");
System.out.println(f1);
//File(String parent, String child):从父路径名字符串和子路径名字符串创建新的 File实例。
File f2 = new File("E:\\demo","java.txt");
System.out.println(f2);
//File(File parent, String child):从父抽象路径名和子路径名字符串创建新的 File实例。
File f3 = new File("E:\\demo");
File f4 = new File(f3,"java.txt");
System.out.println(f4);
}
}
1.3File类创建功能
方法名 |
说明 |
public boolean createNewFile() |
当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空 文件 |
public boolean mkdir() |
创建由此抽象路径名命名的目录 |
public boolean mkdirs() |
创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录 |
示例代码:
public class FileDemo2 {
public static void main(String[] args) throws IOException {
//需求1:我要在E:\\demot目录下创建一个文件java.txt
File f1 = new File("E:\\demo\\java.txt");
System.out.println(f1.createNewFile());
System.out.println("--------");
//需求2:我要在E:\\demo目录下创建一个目录JavaSE
File f2 = new File("E:\\demo\\JavaSE");
System.out.println(f2.mkdir());
System.out.println("--------");
//需求3:我要在E:\\demo目录下创建一个多级目录JavaWEB\\HTML
File f3 = new File("E:\\demo\\JavaWEB\\HTML");
// System.out.println(f3.mkdir());
System.out.println(f3.mkdirs());
System.out.println("--------");
//需求4:我要在E:\\demo目录下创建一个文件javase.txt
File f4 = new File("E:\\demo\\javase.txt");
// System.out.println(f4.mkdir());
System.out.println(f4.createNewFile());
}}
1.4File类判断和获取功能
- 判断方法
方法名 |
说明 |
public boolean isDirectory() |
测试此抽象路径名表示的File是否为目录 |
public boolean isFile() |
测试此抽象路径名表示的File是否为文件 |
public boolean exists() |
测试此抽象路径名表示的File是否存在 |
2. 获取功能
方法名 |
说明 |
public String getAbsolutePath() |
返回此抽象路径名的绝对路径名字符串 |
public String getPath() |
将此抽象路径名转换为路径名字符串 |
public String getName() |
返回由此抽象路径名表示的文件或目录的名称 |
public String[] list() |
返回此抽象路径名表示的目录中的文件和目录的名称字符串数组 |
public File[] listFiles() |
返回此抽象路径名表示的目录中的文件和目录的File对象数组 |
示例代码:
public class FileDemo04 {
public static void main(String[] args) throws IOException {
//创建一个File对象
// File f1 = new File("demo_file\\java.txt");
// System.out.println(f1.createNewFile());
File f = new File("demo_file\\java.txt");
// public boolean isDirectory():测试此抽象路径名表示的File是否为目录
// public boolean isFile():测试此抽象路径名表示的File是否为文件
// public boolean exists():测试此抽象路径名表示的File是否存在
System.out.println(f.isDirectory());
System.out.println(f.isFile());
System.out.println(f.exists());
// public String getAbsolutePath():返回此抽象路径名的绝对路径名字符串
// public String getPath():将此抽象路径名转换为路径名字符串
// public String getName():返回由此抽象路径名表示的文件或目录的名称
System.out.println(f.getAbsolutePath());
System.out.println(f.getPath());
System.out.println(f.getName());
System.out.println("--------");
// public String[] list():返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
// public File[] listFiles():返回此抽象路径名表示的目录中的文件和目录的File对象数组
File f2 = new File("E:\\demo");
String[] strArray = f2.list();
for(String str : strArray) {
System.out.println(str);
}
System.out.println("--------");
File[] fileArray = f2.listFiles();
for(File file : fileArray) {
// System.out.println(file);
// System.out.println(file.getName());
if(file.isFile()) {
System.out.println(file.getName());
}
}
}
}
1.5File类删除功能
方法名 |
说明 |
public boolean delete() |
删除由此抽象路径名表示的文件或目录 |
示例代码:
public class FileDemo03 {
public static void main(String[] args) throws IOException {
// File f1 = new File("E:\\demo\\java.txt");
//需求1:在当前模块目录下创建java.txt文件
File f1 = new File("demo_file\\java.txt");
System.out.println(f1.createNewFile());
//需求2:删除当前模块目录下的java.txt文件
System.out.println(f1.delete());
System.out.println("--------");
//需求3:在当前模块目录下创建demo目录
File f2 = new File("demo_file\\demo");
// System.out.println(f2.mkdir());
//需求4:删除当前模块目录下的itcast目录
System.out.println(f2.delete());
System.out.println("--------");
//需求5:在当前模块下创建一个目录demo,然后在该目录下创建一个文件java.txt
File f3 = new File("demo_file\\demo");
// System.out.println(f3.mkdir());
File f4 = new File("demo_file\\demo\\java.txt");
// System.out.println(f4.createNewFile());
//需求6:删除当前模块下的目录itcast
System.out.println(f4.delete());
System.out.println(f3.delete());
}
}
1.6相对路径与绝对路径
- 绝对路径:完整的路径名,不需要任何其他信息就可以定位它所表示的文件。例如:E:\demo\java.txt
- 相对路径:必须使用取自其他路径名的信息进行解释。例如:myFile\java.txt
2.字节流
2.1IO流介绍
2.1.1IO流概念
- IO:输入/输出(Input/Output)
- 流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输
- IO流就是用来处理设备间数据传输问题的。常见的应用:文件复制;文件上传;文件下载
2.1.2IO流的分类
- 按照数据的流向
- 输入流:读数据
- 输出流:写数据
- 按照数据类型来分
- 字节流
- 字节输入流
- 字节输出流
- 字符流
- 字符输入流
- 字符输出流
- 字节流
2.1.3IO流的使用场景(重要)
- 如果操作的是纯文本文件,优先使用字符流
- 如果操作的是图片、视频、音频等二进制文件。
- 优先使用字节流 如果不确定文件类型,优先使用字节流。字节流是万能的流。
2.2字节流写数据
- 字节流抽象基类
- InputStream:这个抽象类是表示字节输入流的所有类的超类
- OutputStream:这个抽象类是表示字节输出流的所有类的超类
- 子类名特点:子类名称都是以其父类名作为子类名的后缀
- 字节输出流
- FileOutputStream(String name):创建文件输出流以指定的名称写入文件
- 使用字节输出流写数据的步骤
- 创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
- 调用字节输出流对象的写数据方法
- 释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源)
- 示例代码
public class FileOutputStreamDemo01 { public static void main(String[] args) throws IOException { //创建字节输出流对象 //FileOutputStream(String name):创建文件输出流以指定的名称写入文件 FileOutputStream fos = new FileOutputStream("demo_file\\fos.txt"); /* 做了三件事情: A:调用系统功能创建了文件 B:创建了字节输出流对象 C:让字节输出流对象指向创建好的文件 */ //void write(int b):将指定的字节写入此文件输出流 fos.write(97); // fos.write(57); // fos.write(55); //最后都要释放资源 //void close():关闭此文件输出流并释放与此流相关联的任何系统资源。 fos.close(); } }
2.3字节流写数据的两个小问题
- 字节流写数据如何实现换行
- windows:\r\n
- linux:\n
- mac:\r
- 字节流写数据如何实现追加写入
- public FileOutputStream(String name,boolean append)
- 创建文件输出流以指定的名称写入文件。如果第二个参数为true ,则字节将写入文件的末尾而不是开头
示例代码
public class FileOutputStreamDemo03 {
public static void main(String[] args) throws IOException {
//创建字节输出流对象
//append实现追加内容
FileOutputStream fos = new FileOutputStream("demo_file\\fos.txt",true);
//写数据
for (int i = 0; i < 10; i++) {
fos.write("hello".getBytes());
//实现换行
fos.write("\r\n".getBytes());
}
//释放资源
fos.close();
}
}
2.4字节流写数据加异常处理
1.异常处理格式
//被finally控制的语句一定会执行,除非JVM退出
try{
可能出现异常的代码;
}catch(异常类名 变量名){
异常的处理代码;
}finally{
执行所有清除操作;
}
2.示例代码
public class FileOutputStreamDemo04 {
public static void main(String[] args) {
//加入finally来实现释放资源
FileOutputStream fos = null;
try {
fos = new FileOutputStream("demo_file\\fos.txt");
fos.write("hello".getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
2.5字节流读数据(一次读一个字节数据)
- 字节输入流
- FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream ,该文件由文 件系统中的路径名name命名
- 字节输入流读取数据的步骤
- 创建字节输入流对象
- 调用字节输入流对象的读数据方法
- 释放资源
- 示例代码
public class FileInputStreamDemo01 { public static void main(String[] args) throws IOException { //创建字节输入流对象 //FileInputStream(String name) FileInputStream fis = new FileInputStream("myByteStream\\fos.txt"); //调用字节输入流对象的读数据方法 //int read():从该输入流读取一个字节的数据 int by; /* fis.read():读数据 by=fis.read():把读取到的数据赋值给by by != -1:判断读取到的数据是否是-1 */ while ((by=fis.read())!=-1) { System.out.print((char)by); } //释放资源 fis.close(); } }
2.6 字节流读数据(一次读一个字节数组数据)
- 一次读一个字节数组的方法
- public int read(byte[] b):从输入流读取最多b.length个字节的数据
- 返回的是读入缓冲区的总字节数,也就是实际的读取字节个数
- 示例代码
public class FileInputStreamDemo02 { public static void main(String[] args) throws IOException { //创建字节输入流对象 FileInputStream fis = new FileInputStream("demo_file\\fos.txt"); //调用字节输入流对象的读数据方法 //int read(byte[] b):从该输入流读取最多 b.length个字节的数据到一个字节数组 /* hello\r\n world\r\n 第一次:hello 第二次:\r\nwor 第三次:ld\r\nr */ byte[] bys = new byte[1024]; //1024及其整数倍 int len; while ((len=fis.read(bys))!=-1) { System.out.print(new String(bys,0,len)); } //释放资源 fis.close(); } }
2.7案例(复制图片)
- 案例需求
- 把“E:\demo\mn.jpg”复制到模块目录下的“mn.jpg”
- 实现步骤
- 根据数据源创建字节输入流对象 根据目的地创建字节输出流对象
- 读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)
- 释放资源
- 代码实现
public class CopyJpgDemo { public static void main(String[] args) throws IOException { //根据数据源创建字节输入流对象 FileInputStream fis = new FileInputStream("E:\\demo\\mn.jpg"); //根据目的地创建字节输出流对象 FileOutputStream fos = new FileOutputStream("demo_file\\mn.jpg"); //读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组) byte[] bys = new byte[1024]; int len; while ((len=fis.read(bys))!=-1) { fos.write(bys,0,len); } //释放资源 fos.close(); fis.close(); } }