1.File类
1.1File类的介绍
File这个类sun公司给java成员提供的一个处理文件和文件夹的类
现在想想面向对象是啥?专门的对象做专门的事儿
路径问题:【重要】
404 就是找不到当前文件路径
相对路径:
得有参照物
我在你隔壁,参照物是你
./代表当前目录
../相对于当前目录的上一级目录
../../相对于当前目录的上两级目录
../../../相对于当前目录的上三级目录
绝对路径:
磁盘的根路径
C:\Users\wangbo\Desktop\zz2109\day19\code
个人建议,咱们以后在写路径:
使用 /
1./支持windows和Linux
2.\ z支持windows系统,但是不支持Linux系统
新学一个类咱们首先要看官方手册(API)
File这个类是专门处理文件和文件夹的类
很轻松,是个人就会。为啥这样说?学构造方法,学方法就可以。
File类的构造方法,目的 怎么实例化对象
File(String pathName);
根据对应的文件路径,创建出来对应的文件对象或者文件夹对象
File(String parent, String child);
C:\Users\wangbo\Desktop\zz2109\day19\code
根据文件指定的父级目录,和子目录创建一个文件对象或者文件夹对象
File(File file, String chiles);
1.2使用File类创建文件或者文件夹
咱们以后会使用这些方法做文件上传,比如开发中头像上传
很多的网站和app都是实名认证的,现在需要上传身份证正反面,这个就是文件上传的功能
是需要使用到File类下面的方法的
boolean createNewFile();创建文件方法,返回值是布尔类型的数据
【注意事项】:
1.操作文件的路径不存在,返回false
2.硬盘坏了,报错
3.文件已经存在的时候,就返回false
boolean mkdir();
boolean mkdirs();
通过file对象,创建的文件夹是保存的路径地址
boolean renameTo(File file);
通过文件对象,重命名 移动等
public class Demo2 {
public static void main(String[] args) throws IOException {
File file = new File("D:/1.txt");
System.out.println(file.createNewFile());//创建一个文件
File file1 = new File("D:/aaa/bbb/ccc");
File file2 = new File("D:/aaa/abc");
System.out.println(file1.mkdirs());//创建多级目录(文件夹)
System.out.println(file1.renameTo(file2));
}
1.3File删除文件或者文件夹
boolean delete();立即删除
void deleteOnExit();
程序退出以后才删除对应 的文件或者文件夹
删除:硬删除,直接从磁盘上面删除,不会保留到回收站
import java.io.File;
import java.util.Scanner;
public class Demo3 {
public static void main(String[] args) {
File file = new File("D:/1.txt");
System.out.println(file.delete());
File file1 = new File("D:/2.txt");
file1.deleteOnExit();
new Scanner(System.in).nextInt();//这里用了一个scanner来控制程序结束以便看到效果
}
}
1.4File对象的一些判断方法
boolean isFile();是不是普通文件
boolean isDirectory();是不是文件夹(目录)
boolean isHidden();是不是隐藏文件
boolean isAbsolute();是不是绝对路径
boolean exits();对应的文件或者文件夹是否存在
import java.io.File;
public class Demo4 {
public static void main(String[] args) {
File file = new File("D:/1.txt");//文件
System.out.println(file.isFile());//是否为文件
File file1 = new File("D:/aaa/bbb");//文件夹
System.out.println(file1.isDirectory());//是否为目录(文件夹)
System.out.println(file1.isHidden());//是否为隐藏文件
System.out.println(file1.isAbsolute());//是否为绝对路径
System.out.println(file1.exists());//是否为文件或者文件夹
System.out.println(file.exists());//是否为文件或者文件夹
}
}
1.5返回String类型的数据的方法
String getName();获取文件或者文件夹的名字
String getPath();获取当前创建File对象的路径
String getParent();获取当前文件对象的父级目录
String getAbsolutePath();获取绝对路径
import java.io.File;
public class Demo5 {
public static void main(String[] args) {
String path = "D:/aaa/bbb/1.txt";
File file = new File(path);
System.out.println(file.getName());//获取文件夹名或者文件名
System.out.println(file.getParent());//获取当前文件的父级目录
System.out.println(file.getPath());//获取当前创建file对象的名字
File file1 = new File("./");
System.out.println(file1.getPath());//
System.out.println(file1.getAbsolutePath());//获取绝对路径
System.out.println(file.getAbsoluteFile());//返回此抽象路径名的绝对形式。
System.out.println(file.getAbsolutePath());//获取绝对路径
}
}
1.6返回是long类型数据的方法
long length();获取文件占用硬盘的字节数
long lastModified();获取当前文件最后的修改时间,这个时间是时间戳
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo5 {
public static void main(String[] args) {
String path = "D:/aaa/bbb/1.txt";
File file = new File(path);
System.out.println(file.length());//输出文件的大小
System.out.println(file.lastModified());//输出时间戳
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");//设计一个时间格式
String formatString = simpleDateFormat.format(new Date(file.lastModified()));//将时间戳格式化
System.out.println(formatString);
}
}
1.7文件列表方法
static File[] listRoots(); 只适用于windows系统。获取当前盘符下面的所有的类对象
String[] list();
获取当前文件夹对象下面所有的子文件和子文件夹对象
import java.io.File;
public class Demo6 {
public static void main(String[] args) {
File file = new File("");
File[] files = file.listRoots();
for (File file1:files
) {
System.out.println(file1);
}
System.out.println("==================================");
File file1 = new File("D:");
String[] strings = file1.list();
for (String s:strings
) {
System.out.println(s);
}
}
}
2.IO流
IO流主要用作文件读写,其实电脑的功能就是在读写
2.1缓冲概念
看视频有点卡,等他一下,再缓冲一会儿
顺丰快递
上海===》郑州
快递有物流中转基地,到时间点,攒够以后再发
计算机读,存。计算机的cpu通过内存读取硬盘中的数据,不是一个字节一个字节读取的。
每次大概从硬盘中读取4kb。
为什么要读取4kb?
1.提高读取和存储的效率
2.保护磁盘
io流在操作文件的时候:
读取和写入数据,如果按照一个字节或者一个字符来出来的话,效率是非常低的,可以采用缓冲的概念。
1.读取数据,按照CPU通过内存区读取硬盘上的数据,读取的数据是4kb,缓冲到内存区,再从内存区取出来
磁盘-》内存-》数据展示
2.写入,先把数据放到内存中,然后再把内存写到磁盘中
数据-》内存-》磁盘
IO流也是分为两个 读的 流 写的流
2.2IO流的分类
参照物是内存,可以理解为是当前的应用程序(demo)
I
input 输入 从硬盘读取数据存入到了内存中,这叫输入
O
output 输出 从内存中写入数据到硬盘中,这叫输出
输入流(读)和输出流(写)
两种处理方式:
字节流:
按照字节为单位,处理当前文件
字符流:
首先按照字节读取或者写入数据,但是在操作过程中会有一个解码过程。如果解码不成功,就意味着咱们读取数据和写入数据失败了。容易失败
java给咱们提供了
输入字节流
InpuStream 它有一个子类 FileInputStream
输出字节流
OutputStream 他有一个子类 FileOutputStream
2.3缓冲流
所有的缓冲流都是没有读写功能的,一般作用域输入流和输出流上
字节输入缓冲流 BufferedInputStream 字节输出缓冲流 BufferedOutputStream
import java.io.*;
public class Demo7 {
public static void main(String[] args) throws IOException {
File file = new File("D:/aaa/bbb/1.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
int length = -1;
byte[] bytes = new byte[1024 * 4];
while ((length = bufferedInputStream.read(bytes)) != -1) {
System.out.println("已加载4kb");
}
System.out.println(new String(bytes));
bufferedInputStream.close();
}
}
import java.io.*;
public class Demo8 {
public static void main(String[] args) throws IOException {
myOut();
}
public static void myOut() throws IOException {
File file = new File("D:/aaa/bbb/2.txt");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file));
byte[] bytes = "情人节,我单身".getBytes();
bufferedOutputStream.write(bytes);
bufferedOutputStream.close();
}
}