ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

day34-IO流01

2022-09-09 18:31:48  阅读:175  来源: 互联网

标签:文件 01 File IO day34 System file println out


IO流01

1.文件基础知识

什么是文件?

文件,我们并不陌生。文件是保存数据的地方。比如大家经常使用的word文档,txt文件,excel文件等,都是文件。它既可以保存一张图片,也可以保存声音、视频……

  • 文件流

    文件在程序中是以流的形式来操作的:

    image-20220908232444746

流:数据在数据源(文件)和程序(内存)之间经历的路径

输入流:数据从数据源(文件)到程序(内存)之间的路径

输出流:数据从程序(内存)到数据源(文件)之间的路径

2.常用的文件操作

2.1创建文件

  • 创建文件对象相关构造器和方法

    相关方法:

    new File(String pathname)//根据路径构建一个File对象
    new File(File patent,String child)//根据父目录文件+子路径构建
     new File(String parent,String child)//根据父目录+子路径构建
    

例子:应用案例演示:FileCreate

package li.io.file;

import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;

//演示创建文件
public class FileCreate {
    public static void main(String[] args) {
        
    }

    //方式一 new File(String pathname)//根据路径构建一个File对象
    @Test
    public void creat01() {
        String filePath = "d:\\news1.txt";
        File file = new File(filePath);//在内存中创建一个File对象
        try {
            file.createNewFile();//创建文件
            System.out.println("文件创建成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //方式二 new File(File patent,String child)//根据父目录文件+子路径构建
    //例如:d:\\news.txt,父目录文件就是 d:\\
    @Test
    public void creat02() {
        File parenFile = new File("d:\\");
        String fileName = "news2.txt";
        //这里的file对象,在java程序中只是一个java对象而已
        //只有执行了createNewFile方法,才会真正地在磁盘创建文件
        File file = new File(parenFile, fileName);
        try {
            file.createNewFile();//创建文件
            System.out.println("创建成功~");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //方式三 new File(String parent,String child)//根据父目录+子路径构建
    @Test
    public void creat03() {
        String parentPath = "d:\\";  //这里的两个 \\,其中有一个是转义符号,或者直接用 d:/
        String filePath = "news3.txt";
        File file = new File(parentPath, filePath);
        try {
            file.createNewFile();
            System.out.println("创建文件成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
image-20220909154552484

2.2获取文件的相关信息

  • getName()
  • getAbsolutePath()
  • getParent()
  • length()
  • exists()
  • isFile()
  • isDirectory()

例子:

package li.io.file;

import org.junit.jupiter.api.Test;

import java.io.File;

public class FileInformation {
    public static void main(String[] args) {

    }

    //获取文件的信息
    @Test
    public void info() {
        //先创建文件对象
        File file = new File("d:\\news1.txt");

        //调用相应方法,得到对应信息

        //文件名字-getName()
        System.out.println("文件名字="+file.getName());//文件名字=news1.txt

        //文件的绝对路径-getAbsolutePath()
        System.out.println("文件的绝对路径="+file.getAbsolutePath());//文件的绝对路径=d:\news1.txt

        //文件的父级目录-getParentFile()
        System.out.println("文件的父级目录="+file.getParentFile());//文件的父级目录=d:\

        //文件的大小(字节)-length()
        System.out.println("文件的大小(字节)="+file.length());//文件的大小(字节)=12 Hello World!
        
        //文件是否存在-exists()
        System.out.println("文件是否存在="+file.exists());//文件是否存在=true
        
        //是否为文件-isFile()
        System.out.println("是否为文件="+file.isFile());//是否为文件=true

        //是否为目录-isDirectory()
        System.out.println("是否为目录="+file.isDirectory());//是否为目录=false

    }
}

2.3目录的操作和文件删除

  • mkdir():创建一级目录

  • mkdirs():创建多级目录

  • delete():删除空目录或者文件

例子:

package li.io.file;

import org.junit.jupiter.api.Test;

import java.io.File;

public class Directory_ {
    public static void main(String[] args) {

    }

    //判断 d:\\news1.txt是否存在,如果存在就删除
    @Test
    public void m1() {
        String filePath = "d:\\news1.txt";
        File file = new File(filePath);
        if (file.exists()) {
            if (file.delete()) {
                System.out.println(filePath + "删除成功");
            } else {
                System.out.println("删除失败...");
            }
        } else {
            System.out.println("该文件不存在...");
        }
    }

    //判断 d:\\demo02 是否存在,存在就删除,否则就提示不存在
    //这里我们需要体会到,在java中,目录也被当做文件
    @Test
    public void m2() {
        String filePath = "d:\\demo02";
        File file = new File(filePath);
        if (file.exists()) {
            if (file.delete()) {
                System.out.println(filePath + "删除成功");//d:\demo02删除成功(先在d盘下创建一个名为 demo02的目录)
            } else {
                System.out.println("删除失败...");
            }
        } else {
            System.out.println("该目录不存在...");
        }
    }

    //判断d:\\demo\\a\\b\\c目录是否存在,如果存在就提示已经存在,否则创建
    @Test
    public void m3() {
        String directoryPath = "d:\\demo\\a\\b\\c";
        File file = new File(directoryPath);
        if (file.exists()) {
            System.out.println("该目录已经存在");
        } else {
            if (file.mkdirs()) {//多级目录使用 mkdirs方法,一级目录使用 mkdir
                System.out.println(directoryPath + "创建成功...");
            } else {
                System.out.println("创建失败...");
            }
        }
    }
}

3.IO流原理及流的分类

3.1Java IO流原理

  1. I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理数据传输。如读/写文件,网络通讯等
  2. Java程序中,对于数据的输入/输出操作以”流(Stream)“的方式进行
  3. java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过方法输入或输出数据
  4. 输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中
  5. 输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中

3.2流的分类

  • 按操作数据单位不同分为:字节流(8bit)、字符流(按字符)

    字节流适用于二进制文件,字符流适用于文本文件

  • 按数据流的流向不同分为:输入流、输出流

  • 按流的角色不同分为:节点流、处理流(也叫包装流)

抽象基类 字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer

202209091740

1)Java的IO流共涉及到40 多个类,实际上非常规则,都是从如上4个抽象基类派生的

InputStream、OutputStream、Reader、Writer都是抽象类,在使用的时候要去创建它们的实现子类

2)由这四个类派生出来的子类名称都是以其父类名作为子类名后缀

4.常用的类

InputStream抽象类是所有类字节输入流的超类

InputStream常用的子类:

  1. FileInputStream:文件输入流

  2. BufferedInputStream:缓冲字节输入流

  3. ObjectInputStream:对象字节输入流

4.1FileInputStream

标签:文件,01,File,IO,day34,System,file,println,out
来源: https://www.cnblogs.com/liyuelian/p/16673686.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有