学习java第二十天
1、File类
1.1、概述
它是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。
它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的
1.2、构造方法
public Fie(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public Fie(String parent, String child)从父路径名字符串和子路径名字符串创建新的File实例。
public Fie(File parent, String chid)从父抽象路径名和子路径名字符串创建新的Fie实例。
1.3、常用方法
1.3.1、获取功能的方法
publc String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串
publc String getPath() 将此抽象路径名转换为路径名字符串
publc String getName() 返回由此抽象路径名表示的文件或目录的名称
public long length() 返回由File表示的文件的长度
1.3.2、判断功能的方法
publc boolean isDirectory()测试此抽象路径名表示的File是否为目录
publc boolean isFile()测试此抽象路径名表示的File是否为文件
publc boolean exists()测试此抽象路径名表示的File是否存在
1.3.3、创建功能的方法
publiC boolean CreateNewFile() 当且仅当具有该名称的文件尚不存在时,创建一个新的文件夹。
public boolean mkdir() 创建由此抽象路径名命名的目录
public boolean mkdirs() 创建田此抽象路径名命名的目录,包括任何必需但不存在的父目录。
1.3.4、删除功能的方法
publiC boolean delete() 删除田此抽象路径名表示的文件或目录
import java.io.File;
import java.io.IOException;
/*
file类
创建一个文件/文件夹
删除一个文件/文件夹
获取文件/文件夹
判断文件/文件夹
对文件进行遍历
获取文件大小
file 是一个与操作系统无关的类
记住三个单词:
file:是文件
directory:目录、文件夹
path:路径
绝对路径
相对路径
*/
public class Demo01File {
public static void main(String[] args) throws IOException {
String pathSeparator = File.pathSeparator;//文件路径分割符
// System.out.println(pathSeparator);//win 是分号;Linux中是 :冒号
String separator = File.separator;
// System.out.println(separator);//文件名称分割符 Linux:/root/home/
//绝对路径D:\代码\java
//相对路径 ../../
//构造方法演示
show01();
show02("D:\\代码\\java","test");
show03();
// 常用方法演示
show04();
show05();
show06();
show07();
show08();
show09();
show10();
show11();
show12();
}
private static void show12(){
//如果路径不存在,直接返回false
File f1 = new File("D:\\代码\\java\\hello.java");
boolean b1=f1.delete();
System.out.println(b1);
File f2 = new File("1\\2\\33\\44");//相对路径 但是会自动补齐 D:\代码\java\hello
boolean b2=f2.delete();//直接从硬盘上删除 不会放入回收站
System.out.println(b2);
}
private static void show11(){
File f1 = new File("D:\\代码\\java\\hello.java");
boolean b1=f1.mkdir();//只能创建一个文件夹
System.out.println(b1);
File f2 = new File("D:\\代码\\java\\1\\2\\33\\44\\hello.java");
boolean b2=f1.mkdirs();//递归创建文件夹
System.out.println(b1);
}
private static void show10() throws IOException {
File f1 = new File("D:\\代码\\java\\hello.java");
boolean b1 = f1.createNewFile();
System.out.println(b1);
//第二次执行的时候返回false,因为文件已经存在,他只创建未创建的文件
File f2 = new File("D:\\代码\\java\\新建文件夹");//只能创建文件 不要看文件文字 看类型
boolean b2 = f2.createNewFile();
System.out.println(b2);
}
private static void show09(){
File f1 = new File("D:\\代码\\java");//存在
if(f1.exists()) {//返回TRUE,进入if语句
System.out.println(f1.isDirectory());//true
System.out.println(f1.isFile());//false
}
File f2 = new File("D:\\代码\\day20");//存在
if(f2.exists()) {//不存在返回FALSE,所以不会进入if语句
System.out.println(f2.isDirectory());
System.out.println(f2.isFile());
}
File f3 = new File("D:\\代码\\java\\代码.iml");
if(f3.exists()){ //判断是否为文件夹
System.out.println(f2.isDirectory());//false 是个文件
System.out.println(f2.isFile());//false
}
}
private static void show08(){
File f1 = new File("D:\\代码\\java");
System.out.println(f1.exists());//文件存在打印true,不存在答应false
}
//注意 文件夹没有大小概念,不能获取文件夹的大小
private static void show07() {
File f1 = new File("D:\\代码\\day20");
System.out.println(f1.length());//文件夹的大小0
File f2 = new File("D:\\代码\\day20\\classfive");
System.out.println(f2.length());//不存在的文件夹,打印的大小为0
File f3 = new File("D:\\代码\\java\\代码.iml");//存在
System.out.println(f3.length());
}
private static void show06(){
File f1 = new File("D:\\代码\\day20\\hello.java");
File f2 = new File("D:\\代码\\day20");
//获取的构造方法传递路径结尾部分
System.out.println(f1.getName());
System.out.println(f2.getName());
}
private static void show05() {
File f1 = new File("D:\\代码\\day20\\hello.java");
File f2 = new File("a.txt");
String path1 =f1.getPath();
System.out.println(path1);
System.out.println(f2.getPath());
System.out.println(f1);
System.out.println(f1.toString());
}
private static void show04(){
File f1 = new File("D:\\代码\\java.b.txt");
String absolutepath = f1.getAbsolutePath();//获取绝对路径
System.out.println(absolutepath);
File f2 = new File("hello.java");//相对路径创建,获取绝对路径
//创建的时候,是放在项目路径下面
String absolutepath2 = f2.getAbsolutePath();
System.out.println(absolutepath2);
}
private static void show03(){
File parent = new File("D:\\代码\\java");
File f1 = new File(parent,"hello,java");
System.out.println(f1);
}
private static void show02(String parent,String child) {
File f1 = new File(parent,child);
System.out.println(f1);
}
private static void show01(){
File f1 = new File("D:\\代码\\java");
System.out.println(f1);
//仅仅是创建了File这样的类,并不会去检验他的正确性
File f2 = new File("D:\\代码\\java\\b.txt");
System.out.println(f2);
File f3 = new File("b.txt");
System.out.println(f3);
}
}
二、IO流概述和分类
1.I0流介绍
I0 :输入/输出(Input/Output)
0流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传
输
I0流就是用来处理设备间数据传输问题的。常见的应用:文件复制;文件上传;文件下载
10流的分类
按照数据的流向
输入流:读数据
输出流:写数据
按照数据类型来分
字节流
字节输入流
1、字节输出流
字符流
字符输入流
字符输出流
I0流的使用场景
如果操作的是纯文本文件,优先使用字符流
如果操作的是图片、视频、音频等二进制文件。 优先使用字节流
如果不确定文件类型,优先使用字节流。字节流是万能的流
2.字节流写数据
字节流抽象基类
InputStream :这个抽象类是表示字节输入流的所有类的超类
OutputStream :这个抽象类是表示字节输出流的所有类的超类
子类名特点:子类名称都是以其父类名作为子类名的后缀
字节输出流
0 FileOutputStream(String name) :创建文件输出流以指定的名称写入文件
使用字节输出流写数据的步骤
创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
调用字节输出流对象的写数据方法
释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源)
package demo02;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/*
* 构造方法的使用:
* 1.创建了一个FileOutputStream 对象
* 2.根据构造方法中传递的文件/文件路径,创建一个空文件夹
* 3.会把FileOutputStream 对象指向创建的文件
* 写入过程:
* java程序 --> jvm(java虚拟机) --> os(系统操作上) --> 会调用对应的驱动 --> 把数据写入文件
*/
public class Demo02OutputStream {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("a.txt");
//调用write方法,将数据写入文件中
//fos.write(97);
//fos.write(98);
//fos.write(99);
//释放资源
//fos.write(49);
//fos.write(48);
//fos.write(48);
//现在文件中就是100
//byte[] bytes = {65,66,67,68};//出现ABCD
//byte[] bytes = {-65,-66,-67,-68};//会被当成中文来解释
byte[] bytes = {65,66,67,68,69,70};
fos.write(bytes,2,3);
fos.close();
}
}