一、File类
File类:描述了文件或文件夹(目录)的属性,用于提供对文件操作API
(1)创建File对象
File f = new File("G:\\2023_Java\\Java_Basic_Core\\src\\test");//绝对路径
File f2 = new File("test2/test");//相对路径
文件类API的使用:
(1)length();获取文件大小,UTF-8中文占3个字节,GBK中字符占两个字节,字母和数字都占一个字节。
System.out.println(f.length());
System.out.println(f2.length());//不能表示文件的大小
(2)isFile();判断是否是文件
System.out.println(f.isFile());//true
System.out.println(f2.isFile());//false
(3)isDirectory()判断是否是文件夹
System.out.println(f.isDirectory());//false
System.out.println(f2.isDirectory());//true
(4)getParent()获取父目录的名称
System.out.println(f.getParent());//test2
System.out.println(f2.getParent());//null
(5)File getParentFile();获取的是父目录的对象
File parentFile = f.getParentFile();
(6)createNewFile()创建新的文件,如果文件已经存在,则返回false
//1.创建要创建的文件的File对象
File newFile = new File("test2/test2.txt");
//2.调用createNewFile();方法创建文件
System.out.println(newFile.createNewFile());
(7) boolean mkdir();创建单级文件夹;mkdirs();创建多级文件夹
//1.创建要创建的文件的File对象
File newDir = new File("test2/hello/hello2");
//2.调用mkDir()方法创建文件
System.out.println(newDir.mkdir());
(8)delete();删除文件或文件夹,如果文件夹不为空无法删除
(9)String[] list;返回指定目录下的所有一级文件或者文件夹的名称数组
File f4 = new File("src/day5");
System.out.println("遍历文件夹");
String[] names = f4.list();
for (String name : names) {
System.out.println(name);
}
(10)ListFiles();返回指定目录下的所有一级文件或文件夹的File对象
File[] files = f4.listFiles();
System.out.println("遍历文文件名称");
for (File file : files) {
if(file.isFile()){
System.out.println(file.getName());
}
}
二、IO流
概述
在电脑程序中,对数据的传入,可以看成数据的流动,根据流动的方向分为输入流和输出流;
java中的IO就是对数据进行输入,输出操作,数据的I/O操作依靠流来实现,根据数据单位的不同又将流分为字节流和字符流。
ps:一切文件的数据(文本、图片、视频)在存储时,都是以二进制的形式进行保存,都是以字节为单位,因此通过字节流可以操作任意的数据
![](https://i-blog.csdnimg.cn/blog_migrate/756adff787bfb9d70dc2f501428291b2.png)
字节流
根据方向分为:
(1)输出流:OutputStream类,是一个抽象类,不能创建对象
它的子类:FileOutputStream类
构造函数:public FilOutputStream(String path)
Public FileOutputStream(File f)
//1、文件字输出流的使用
public static void test01() {
FileOutputStream fos =null;
//1.创建指定文件的字节输出流
try {
fos = new FileOutputStream("test2/test.txt",true);//true表示追加在文本后面,而不是覆盖
//2.调用write方法,将内容写到文件中,使用ASC码
fos.write(97);
//3.调用write(byte[] b) 可以一次性写入多个数据
String str="hello,world";
//getBytes()将字符串转换成字节数组
fos.write(str.getBytes());
fos.write(10);
fos.write("你好".getBytes());
} catch (Exception e) {
e.printStackTrace();
}finally {
//关闭流
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
(2)输入流:InputStream类 是一个抽象类,不能创建对象
它的子 类:FileOutpuStream类
构造函数:public FileInputStrEam(String path)
public FileInputStrEam(File f)
//2、文件字输入流的使用
public static void test02(){
FileInputStream fis=null;
try{
//1.创建指定文件的字节输入流
fis = new FileInputStream("test2/test.txt");
//2.read();读取一个数据,获取得到ASC码,当数据读取完后,返回的是-1
// int data = fis.read();
// System.out.println((char)data);
int data;//用于接受读取到的数据
// while((data=fis.read())!=-1){
// System.out.println((char)data);
// }
//3.read(byte[] b);一次性读取多个数据,存储到byte数组中,返回值为读取到的数据的有效个数,读完是返回-1
byte[] b = new byte[1024];//长度一般设置为1024 的倍数
int len;//表示读取到的有效数据个数
while((len=fis.read(b))!=-1){
//通过newString(byte[] b,int off,int len)将字节数组转换成字符串
// String s = new String();
System.out.println(new String(b));
System.out.println(new String(b,0,len));//读取了多少个就转多少个 没必要把使用的空间都一起转换
}
// int result = fis.read(b);
// System.out.println(result);
}catch (Exception e){
e.printStackTrace();
}finally {
try {
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
字符流
根据方向分为:
(1)输出流:writer类,是一个抽象类,不能创建对象
子类:FileWriter
具体使用如下:
//3、文件字符输出流的使用
public static void test03(){
//1.创建指定文件输出流的对象
FileWriter fw=null;
try{
fw = new FileWriter("test2/test2.txt",true);
//2.write(String str);将字符串写到文件中
fw.write("jjjjjkkoioio");
fw.write(" java");
//3.writer(char[] c)
char[] c={'s','d','j'};
fw.write(c);
fw.flush();//将缓冲区内容加载到文件中
}catch (Exception e){
e.printStackTrace();
}finally {
try {
//3.关闭流,同时将缓冲区内容加载到文件中
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
(2)输入流:Reader
子类:FileReader
具体使用如下:
//4、文件字符输入流的使用
public static void test04(){
try{
//1.创建指定文件的字符输入流对象
FileReader fr = new FileReader("test2/test2.txt");
//2.使用read()循环读取文本内容
int data;
while((data = fr.read())!=-1){
System.out.println((char)data);
}
//3.read(char[] c
int len;//用于接收读取到的有效数据个数
char[] c = new char[1024];//用于存储每次读取到的数据
while((len=fr.read(c))!=-1){
//将char数组转换成String newString(char[] c,int off,int len)
System.out.println(new String(c,0,len));
}
}catch(Exception e){
e.printStackTrace();
}
}