69_Java_IO_File_IO流_节点_字符_字节流

举报
alexsully 发表于 2021/06/23 11:13:26 2021/06/23
【摘要】 IO file 节点流 字符 字节

 File

1 java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关
2 File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。 如果需要访问文件内容本身,则需要使用输入/输出流

3 后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的"终点". 

一 File 创建_构造器

1.如何创建File类的实例
  File(String filePath)
  File(String parentPath,String childPath)
  File(File parentFile,String childPath)

2. 相对路径:相较于某个路径下,指明的路径。绝对路径:包含盘符在内的文件或文件目录的路径

3.路径分隔符  windows:\\  unix:/
    @Test
    public void test1(){
        //构造器1
        
        File file1 = new File("hello.txt");//相对于当前module
        File file2 =  new File("D:\\workspace_idea1\\JavaSenior\\day08\\he.txt");

        //构造器2:
        File file3 = new File("D:\\workspace_idea1","JavaSenior");

        //构造器3:
        File file4 = new File(file3,"hi.txt");
    }

二 File 方法

public String getAbsolutePath():获取绝对路径
public String getPath() :获取路径
public String getName() :获取名称
public String getParent():获取上层文件目录路径。若无,返回null
public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
public long lastModified() :获取最后一次的修改时间,毫秒值

如下的两个方法适用于文件目录:
public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组
public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组
public boolean renameTo(File dest):把文件重命名为指定的文件路径 ;要想保证返回true,需要file1在硬盘中是存在的,且file2不能在硬盘中存在

public boolean isDirectory():判断是否是文件目录
public boolean isFile() :判断是否是文件
public boolean exists() :判断是否存在
public boolean canRead() :判断是否可读
public boolean canWrite() :判断是否可写
public boolean isHidden() :判断是否隐藏

    创建硬盘中对应的文件或文件目录
public boolean createNewFile() :创建文件。若文件存在,则不创建,返回false
public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
public boolean mkdirs() :创建文件目录。如果此文件目录存在,就不创建了。如果上层文件目录不存在,一并创建

    删除磁盘中的文件或文件目录
public boolean delete():删除文件或者文件夹


 @Test
    public void test2(){
        File file1 = new File("hello.txt"); // 内存层面的的调用,不涉及硬盘是否存在
        System.out.println(file1.getAbsolutePath()); //F:\codes\java_reviews\chapter12IO\hello.txt
        System.out.println(file1.getPath());
        System.out.println(file1.getName());
        System.out.println(file1.getParent());
        System.out.println(file1.length());
        System.out.println(new Date(file1.lastModified()));

        System.out.println("**********");

        System.out.println(file1.isDirectory());
        System.out.println(file1.isFile());
        System.out.println(file1.exists()); // false
        System.out.println(file1.canRead());
        System.out.println(file1.canWrite());
        System.out.println(file1.isHidden());
    }

    @Test
    public void test3(){
        File file1 = new File("F:\\codes\\java_reviews");
        String[] list = file1.list();

        for (String s: list){
            System.out.println(s);
        }


        System.out.println("*******");
        File[] files = file1.listFiles();
        for (File f: files){
            System.out.println(f);
        }
    }

    @Test
    public void test4() throws IOException {
        File file1 = new File("hi.txt");
        if(!file1.exists()){
            //文件的创建
            file1.createNewFile();  // module下 src 平级
            System.out.println("创建成功");
        }else{//文件存在
            file1.delete();
            System.out.println("删除成功");
        }
    }

    @Test
    public void test5(){
        File file2 = new File("d:\\io\\io1\\io4");

        boolean mkdir1 = file2.mkdirs();
        if(mkdir1){
            System.out.println("创建成功2");
        }

//        //要想删除成功,io4文件目录下不能有子目录或文件
        File file3 = new File("D:\\io\\io1\\io4");
        file3 = new File("D:\\io\\io1");  // io1下面有io4
        System.out.println(file3.delete());
//        System.out.println(file3.delete());  // 如果file3=io4 仅仅删除 io4
    }


 

Java.io包下
一、流的分类:
  1.操作数据单位:字节流(文本文件(.txt,.java,.c,.cpp))、字符流 (非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt)
  2.数据的流向:输入流、输出流
  3.流的角色:节点流、处理流 


二、流的体系结构
     抽象基类         节点流(或文件流)                               缓冲流(处理流的一种)
     InputStream     FileInputStream   (read(byte[] buffer))        BufferedInputStream (read(byte[] buffer))
     OutputStream    FileOutputStream  (write(byte[] buffer,0,len)  BufferedOutputStream (write(byte[] buffer,0,len) / flush()
     Reader          FileReader (read(char[] cbuf))                 BufferedReader (read(char[] cbuf) / readLine())
     Writer          FileWriter (write(char[] cbuf,0,len)           BufferedWriter (write(char[] cbuf,0,len) / flush()

 

 @Test
    public void test1(){
        FileReader fileReader = null;
        try {
            //1.实例化File类的对象,指明要操作的文件
            File file = new File("hello.txt");
            //2.提供具体的流
            fileReader = new FileReader(file);
            //3.数据的读入
            //read():返回读入的一个字符。如果达到文件末尾,返回-1
            int data ;
            while ((data =fileReader.read()) != -1){
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.流的关闭操作
            if (fileReader != null)
            try {
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

 FileReader

@Test
    public void test2(){
        FileReader fileReader = null;
        try {
            File file = new File("hello.txt");
            fileReader = new FileReader(file);
            //read(char[] cbuf):返回每次读入cbuf数组中的字符的个数。如果达到文件末尾,返回-1
            char[] chars = new char[5];
            int data ;
            while ((data= fileReader.read(chars)) !=-1){
                String s = new String(chars, 0, data);
                System.out.print(s);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileReader !=null){
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

FileReader&FileWriter

@Test
    public void test3(){
        copyFile("hello.txt", "hello1.txt");
    }


    public void copyFile(String srcFile, String destFile){
        FileReader fileReader = null;
        FileWriter fileWriter = null;
        try {
            File srcfile = new File(srcFile);
            File destfile = new File(destFile);

            fileReader = new FileReader(srcFile);
            fileWriter = new FileWriter(destFile);

            char[] chars = new char[5];
            int len; //记录每次读入到cbuf数组中的字符的个数

            while ((len = fileReader.read(chars)) != -1){
//                fileWriter.write(chars,0,len); //每次写出len个字符
//                fileWriter.write(chars); //每次把chars 数组内容写入到目标文件
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileReader !=null){
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (fileWriter != null){
                try {
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


FileInputStream和FileOutputStream的使用

  1. 对于文本文件(.txt,.java,.c,.cpp),使用字符流处理   reader & writer
  2. 对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,...),使用字节流处理  Inputstream OutStream

 

    public void copyFile(String srcPath,String destPath){
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            //
            File srcFile = new File(srcPath);
            File destFile = new File(destPath);

            //
            fis = new FileInputStream(srcFile);
            fos = new FileOutputStream(destFile);

            //复制的过程
            byte[] buffer = new byte[1024];
            int len;
            while((len = fis.read(buffer)) != -1){
                fos.write(buffer,0,len);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fos != null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fis != null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。