IO流File类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cheidou123/article/details/82941784

一、什么是File类

用来抽象的表示文件或文件夹,这个File不一定存在。代表着java和资源的一个关联

二、路径

1. 拼接路径的方式

第一种拼接方式:直接用/来分割
第二种拼接方式:用File.separator

2. 绝对路径和相对路径

绝对路径:完整的文件路径
相对路径:相对于项目的路径
/***
 * @author bincai
 * @email [email protected]
 */
public class PathTest {
    public static void main(String[] args) {
        //第一种拼接方式:直接用/来分割
        String path1 = "/Users/caibin/IOstudy/timg.jpeg";
        File file1 = new File(path1);
        System.out.println(path1);
        System.out.println(file1.length());

        //第二种拼接方式,用File.separator
        String path2 = File.separator + "Users" + File.separator + "caibin" + File.separator + "IOstudy" + File.separator + "timg.jpeg";
        File file2 = new File(path2);
        System.out.println(path2);
        System.out.println(file2.length());

        //绝对路径
        String path3 = "/Users/caibin/IOstudy/timg.jpeg";
        File file3 = new File(path3);
        System.out.println(path3);
        System.out.println(file3.length());

        //相对路径
        String path4 = "timg.jpeg";
        File file4 = new File(path4);
        System.out.println(path4);
        System.out.println(file4.length());
    }
}

三、File类的构建

1.通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例

File(String pathname) 

2.根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

File(String parent, String child) 

3.通过给定的父抽象路径名和子路径名字符串创建一个新的File实例。

File(File parent, String child);

4.通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例。

这个相对来说最难理解

File(URI uri) 

5.代码

/***
 * @author bincai
 * @email [email protected]
 */
public class No2_BuildFile {
    public static void main(String[] args) {
        File file = new File("/Users/caibin/IOstudy/timg.jpeg");
        System.out.println(file.length());

        File file2 = new File("/Users/caibin/IOstudy", "timg.jpeg");
        System.out.println(file2.length());

        File file3 = new File(new File("/Users/caibin/IOstudy"), "timg.jpeg");
        System.out.println(file3.length());

        try {
            URI url = new URI("file", null, "/Users/caibin/IOstudy/timg.jpeg", null, null);
            File file4 = new File(url);
            System.out.println(file4.length());
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

四、File类常用API

1.名称/路径

getName() 获取文件名
getPath() 获取路径(构建是是什么路径就是绝对路径)
getAbsoultePath() 获取绝对路径
getParent() 获取父路径,把getPath文件的名称分隔符前面的拿出来,没有返回为null

2.文件状态

exists() 是否存在
isFile() 是否是文件,目录不是文件夹,在存在的情况下只有文件和目录两种状态!
isDirectory() 是否是目录
import java.io.File;

/***
 * @author bincai
 * @email [email protected]
 */
public class No3_FileState {
    public static void main(String[] args) {
        File file = new File("/Users/caibin/IOstudy/timg.jpeg");
        if (null == file || !file.exists()) {  //这里null == file 这里不需要,这里为了完整加上
            System.out.println("文件不存在");
        } else {
            if (file.isFile()) {
                System.out.println("这是个文件");
            } else {
                System.out.println("这是个目录");
            }
        }
    }
}

3.文件长度

length() 文件长度,如果是目录或不存在返回0, 返回的是long类型

4.创建删除

createNewFile() 创建文件,如果创建不成功(比如已经存在,则返回false),不能创建文件夹
delete() 删除文件,如果是删除文件夹要使用递归!!!
import java.io.File;
import java.io.IOException;

/***
 * @author bincai
 * @email [email protected]
 */
public class No4_CreateFile {
    public static void main(String[] args) throws IOException {
        File file = new File("/Users/caibin/IOstudy/caibin.txt");
        System.out.println("创建文件之前是否存在"+file.exists());
        System.out.println("创建文件"+file.createNewFile());
        System.out.println("文件是否存在"+file.exists());
        System.out.println("删除文件"+file.delete());
        System.out.println("删除文件之后文件是否存在"+file.exists());
    }
}

5 文件夹相关

mkdir()/mkdirs() 创建目录,mkdir必须保证上一级存在,mkdirs如果父目录不存在则一同创建,尽量用mkdirs()
list() 返回下级名称(包括文件和文件夹)数组,只是下一级
listFiles() 返回下级File对象(包括文件和文件夹)数组,只是下一级
另外,遍历子孙所有文件,获取文件夹大小,delete需要用递归
public class No5_DirectoryList {
    public static void main(String[] args) {
        File dir = new File("/Users/caibin/IOstudy/son/grandson1");
        System.out.println(dir.mkdirs());
        File dir2 = new File("/Users/caibin/IOstudy/son/grandson2");
        System.out.println(dir2.mkdirs());
        File dir3 = new File("/Users/caibin/IOstudy/son");
        String[] list = dir3.list();
        for (String s : list) {
            System.out.println(s);
        }
        File[] list2 = dir3.listFiles();
        for (File s : list2) {
            System.out.println(s.getAbsolutePath());
        }
        //删除一定要用递归
        delete(dir3);
    }

        public static void delete(File f) {
            if(f.isDirectory()){
                File[] files = f.listFiles();
                for (File file : files) {
                    delete(file);
                    file.delete();
                }
            }
            f.delete();
        }
    }

五、编码与解码

1.什么是字符集

字符集其实就是一个码表,一个字符不同的字符集对应的字节不一样。
utf-8 中文三个字节,英文一个
gbk 中文两个字节,英文一个

2. 编码encode

由字符到字节叫做编码,默认的字符集是根据项目配置来的。

3.解码decode

由字节到字符叫做解码

4.乱码出现的原因

⑴ 字节数不够
⑵ 字符集不统一

5.代码

public class No6_EnDecode {
    public static void main(String[] args) throws IOException {
        String input = "io流";
        //编码 默认的字符集是根据项目配置来的
        byte[] byte1 = input.getBytes();
        System.out.println(byte1.length);
        //使用指定字符集编码
        byte[] byte2 = input.getBytes("gbk");
        System.out.println(byte2.length);

        //解码
        String output = new String(byte1);
        System.out.println(output);

        //乱码1 字节数不够,导致乱码
        String output2 = new String(byte1,0,byte1.length-1);
        System.out.println(output2);

        //乱码2 字符集不一致
        String output3 = new String(byte1,"gbk");
        System.out.println(output3);
    }
}

猜你喜欢

转载自blog.csdn.net/cheidou123/article/details/82941784